UNPKG

vexflow

Version:

A JavaScript library for rendering music notation and guitar tablature

30,437 lines 1.39 MB
(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();
})(window, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId]) {
/******/ 			return installedModules[moduleId].exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			i: moduleId,
/******/ 			l: false,
/******/ 			exports: {}
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.l = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// define getter function for harmony exports
/******/ 	__webpack_require__.d = function(exports, name, getter) {
/******/ 		if(!__webpack_require__.o(exports, name)) {
/******/ 			Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ 		}
/******/ 	};
/******/
/******/ 	// define __esModule on exports
/******/ 	__webpack_require__.r = function(exports) {
/******/ 		if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 			Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 		}
/******/ 		Object.defineProperty(exports, '__esModule', { value: true });
/******/ 	};
/******/
/******/ 	// create a fake namespace object
/******/ 	// mode & 1: value is a module id, require it
/******/ 	// mode & 2: merge all properties of value into the ns
/******/ 	// mode & 4: return value when already ns object
/******/ 	// mode & 8|1: behave like require
/******/ 	__webpack_require__.t = function(value, mode) {
/******/ 		if(mode & 1) value = __webpack_require__(value);
/******/ 		if(mode & 8) return value;
/******/ 		if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ 		var ns = Object.create(null);
/******/ 		__webpack_require__.r(ns);
/******/ 		Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ 		if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ 		return ns;
/******/ 	};
/******/
/******/ 	// getDefaultExport function for compatibility with non-harmony modules
/******/ 	__webpack_require__.n = function(module) {
/******/ 		var getter = module && module.__esModule ?
/******/ 			function getDefault() { return module['default']; } :
/******/ 			function getModuleExports() { return module; };
/******/ 		__webpack_require__.d(getter, 'a', getter);
/******/ 		return getter;
/******/ 	};
/******/
/******/ 	// Object.prototype.hasOwnProperty.call
/******/ 	__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(__webpack_require__.s = "./src/index.js");
/******/ })
/************************************************************************/
/******/ ({

/***/ "./src/accidental.js":
/*!***************************!*\
  !*** ./src/accidental.js ***!
  \***************************/
/*! exports provided: Accidental */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Accidental", function() { return Accidental; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./music */ "./src/music.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }

function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }

function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }

function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }

function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }

function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }

function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }

function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// @author Mohit Cheppudira
// @author Greg Ristow (modifications)
//
// ## Description
//
// This file implements accidentals as modifiers that can be attached to
// notes. Support is included for both western and microtonal accidentals.
//
// See `tests/accidental_tests.js` for usage examples.





 // To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (Accidental.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.Accidental', args);
}

var getGlyphWidth = function getGlyphWidth(glyph) {
  return glyph.getMetrics().width;
}; // An `Accidental` inherits from `Modifier`, and is formatted within a
// `ModifierContext`.


var Accidental =
/*#__PURE__*/
function (_Modifier) {
  _inherits(Accidental, _Modifier);

  _createClass(Accidental, null, [{
    key: "format",
    // Arrange accidentals inside a ModifierContext.
    value: function format(accidentals, state) {
      var _this2 = this;

      var noteheadAccidentalPadding = 1;
      var leftShift = state.left_shift + noteheadAccidentalPadding;
      var accidentalSpacing = 3; // If there are no accidentals, we needn't format their positions

      if (!accidentals || accidentals.length === 0) return;
      var accList = [];
      var prevNote = null;
      var shiftL = 0; // First determine the accidentals' Y positions from the note.keys

      for (var i = 0; i < accidentals.length; ++i) {
        var acc = accidentals[i];
        var note = acc.getNote();
        var stave = note.getStave();
        var props = note.getKeyProps()[acc.getIndex()];

        if (note !== prevNote) {
          // Iterate through all notes to get the displaced pixels
          for (var n = 0; n < note.keys.length; ++n) {
            shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);
          }

          prevNote = note;
        }

        if (stave !== null) {
          var lineSpace = stave.options.spacing_between_lines_px;
          var y = stave.getYForLine(props.line);
          var accLine = Math.round(y / lineSpace * 2) / 2;
          accList.push({
            y: y,
            line: accLine,
            shift: shiftL,
            acc: acc,
            lineSpace: lineSpace
          });
        } else {
          accList.push({
            line: props.line,
            shift: shiftL,
            acc: acc
          });
        }
      } // Sort accidentals by line number.


      accList.sort(function (a, b) {
        return 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.

      var lineList = []; // amount by which all accidentals must be shifted right or left for
      // stem flipping, notehead shifting concerns.

      var accShift = 0;
      var previousLine = null; // Create an array of unique line numbers (lineList) from accList

      for (var _i = 0; _i < accList.length; _i++) {
        var _acc = accList[_i]; // if this is the first line, or a new line, add a lineList

        if (previousLine === null || previousLine !== _acc.line) {
          lineList.push({
            line: _acc.line,
            flatLine: true,
            dblSharpLine: true,
            numAcc: 0,
            width: 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 'Vex.Flow.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?


      var totalColumns = 0; // establish the boundaries for a group of notes with clashing accidentals:

      var _loop = function _loop(_i3) {
        var noFurtherConflicts = false;
        var groupStart = _i3;
        var groupEnd = _i3;

        while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {
          // if this note conflicts with the next:
          if (_this2.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


        var getGroupLine = function getGroupLine(index) {
          return lineList[groupStart + index];
        };

        var getGroupLines = function getGroupLines(indexes) {
          return indexes.map(getGroupLine);
        };

        var lineDifference = function lineDifference(indexA, indexB) {
          var _getGroupLines$map = getGroupLines([indexA, indexB]).map(function (item) {
            return item.line;
          }),
              _getGroupLines$map2 = _slicedToArray(_getGroupLines$map, 2),
              a = _getGroupLines$map2[0],
              b = _getGroupLines$map2[1];

          _i2 = _i3;
          return a - b;
        };

        var notColliding = function notColliding() {
          for (var _len2 = arguments.length, indexPairs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
            indexPairs[_key2] = arguments[_key2];
          }

          return indexPairs.map(getGroupLines).every(function (lines) {
            return !_this2.checkCollision.apply(_this2, _toConsumableArray(lines));
          });
        }; // Set columns for the lines in this group:


        var groupLength = groupEnd - groupStart + 1; // Set the accidental column for each line of the group

        var endCase = _this2.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;
        }

        var groupMember = void 0;
        var column = void 0; // If the group contains more than seven members, 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:
          var patternLength = 2;
          var collisionDetected = true;

          while (collisionDetected === true) {
            collisionDetected = false;

            for (var line = 0; line + patternLength < lineList.length; line++) {
              if (_this2.checkCollision(lineList[line], lineList[line + patternLength])) {
                collisionDetected = true;
                patternLength++;
                break;
              }
            }
          } // Then, assign a column to each line of accidentals


          for (groupMember = _i3; groupMember <= groupEnd; groupMember++) {
            column = (groupMember - _i3) % patternLength + 1;
            lineList[groupMember].column = column;
            totalColumns = totalColumns > column ? totalColumns : column;
          } // Otherwise, if the group contains fewer than seven members, use the layouts from
          // the accidentalsColumnsTable housed in tables.js.

        } else {
          for (groupMember = _i3; groupMember <= groupEnd; groupMember++) {
            column = _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].accidentalColumnsTable[groupLength][endCase][groupMember - _i3];
            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.


        _i3 = groupEnd;
        _i2 = _i3;
      };

      for (var _i2 = 0; _i2 < lineList.length; _i2++) {
        _loop(_i2);
      } // ### 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:


      var columnWidths = [];
      var columnXOffsets = [];

      for (var _i4 = 0; _i4 <= totalColumns; _i4++) {
        columnWidths[_i4] = 0;
        columnXOffsets[_i4] = 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(function (line) {
        if (line.width > columnWidths[line.column]) columnWidths[line.column] = line.width;
      });

      for (var _i5 = 1; _i5 < columnWidths.length; _i5++) {
        // this column's offset = this column's width + previous column's offset
        columnXOffsets[_i5] = columnWidths[_i5] + columnXOffsets[_i5 - 1];
      }

      var totalShift = columnXOffsets[columnXOffsets.length - 1]; // Set the xShift for each accidental according to column offsets:

      var accCount = 0;
      lineList.forEach(function (line) {
        var lineWidth = 0;
        var lastAccOnLine = accCount + line.numAcc; // handle all of the accidentals on a given line:

        for (accCount; accCount < lastAccOnLine; accCount++) {
          var 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;
    } // Helper function to determine whether two lines of accidentals collide vertically

  }, {
    key: "checkCollision",
    value: function checkCollision(line1, line2) {
      var clearance = line2.line - line1.line;
      var 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;
      }

      var 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`.

  }, {
    key: "applyAccidentals",
    value: function applyAccidentals(voices, keySignature) {
      var tickPositions = [];
      var tickNoteMap = {}; // Sort the tickables in each voice by their tick position in the voice

      voices.forEach(function (voice) {
        var tickPosition = new _fraction__WEBPACK_IMPORTED_MODULE_1__["Fraction"](0, 1);
        var notes = voice.getTickables();
        notes.forEach(function (note) {
          if (note.shouldIgnoreTicks()) return;
          var notesAtPosition = tickNoteMap[tickPosition.value()];

          if (!notesAtPosition) {
            tickPositions.push(tickPosition.value());
            tickNoteMap[tickPosition.value()] = [note];
          } else {
            notesAtPosition.push(note);
          }

          tickPosition.add(note.getTicks());
        });
      });
      var 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

      var scaleMap = music.createScaleMap(keySignature);
      tickPositions.forEach(function (tick) {
        var notes = tickNoteMap[tick]; // Array to store all pitches that modified accidental states
        // at this tick position

        var modifiedPitches = [];

        var processNote = function processNote(note) {
          if (note.isRest() || note.shouldIgnoreTicks()) return; // Go through each key and determine if an accidental should be
          // applied

          note.keys.forEach(function (keyString, keyIndex) {
            var key = music.getNoteParts(keyString.split('/')[0]); // Force a natural for every key without an accidental

            var accidentalString = key.accidental || 'n';
            var pitch = key.root + accidentalString; // Determine if the current pitch has the same accidental
            // as the scale state

            var sameAccidental = scaleMap[key.root] === pitch; // Determine if an identical pitch in the chord already
            // modified the accidental state

            var previouslyModified = modifiedPitches.indexOf(pitch) > -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] = pitch; // Create the accidental

              var accidental = new Accidental(accidentalString); // Attach the accidental to the StaveNote

              note.addAccidental(keyIndex, accidental); // Add the pitch to list of pitches that modified accidentals

              modifiedPitches.push(pitch);
            }
          }); // process grace notes

          note.getModifiers().forEach(function (modifier) {
            if (modifier.getCategory() === 'gracenotegroups') {
              modifier.getGraceNotes().forEach(processNote);
            }
          });
        };

        notes.forEach(processNote);
      });
    } // Create accidental. `type` can be a value from the
    // `Vex.Flow.accidentalCodes.accidentals` table in `tables.js`. For
    // example: `#`, `##`, `b`, `n`, etc.

  }, {
    key: "CATEGORY",
    get: function get() {
      return 'accidentals';
    }
  }]);

  function Accidental() {
    var _this;

    var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;

    _classCallCheck(this, Accidental);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Accidental).call(this));

    _this.setAttribute('type', 'Accidental');

    L('New accidental: ', type);
    _this.note = null; // The `index` points to a specific note in a chord.

    _this.index = null;
    _this.type = type;
    _this.position = _modifier__WEBPACK_IMPORTED_MODULE_4__["Modifier"].Position.LEFT;
    _this.render_options = {
      // Font size for glyphs
      font_scale: 38,
      // Length of stroke across heads above or below the stave.
      stroke_px: 3,
      // Padding between accidental and parentheses on each side
      parenLeftPadding: 2,
      parenRightPadding: 2
    };
    _this.accidental = _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].accidentalCodes(_this.type);

    if (!_this.accidental) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('ArgumentError', "Unknown accidental type: ".concat(type));
    } // Cautionary accidentals have parentheses around them


    _this.cautionary = false;
    _this.parenLeft = null;
    _this.parenRight = null;

    _this.reset();

    return _this;
  }

  _createClass(Accidental, [{
    key: "reset",
    value: function reset() {
      var fontScale = this.render_options.font_scale;
      this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_5__["Glyph"](this.accidental.code, fontScale);
      this.glyph.setOriginX(1.0);

      if (this.cautionary) {
        this.parenLeft = new _glyph__WEBPACK_IMPORTED_MODULE_5__["Glyph"](_tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].accidentalCodes('{').code, fontScale);
        this.parenRight = new _glyph__WEBPACK_IMPORTED_MODULE_5__["Glyph"](_tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].accidentalCodes('}').code, fontScale);
        this.parenLeft.setOriginX(1.0);
        this.parenRight.setOriginX(1.0);
      }
    }
  }, {
    key: "getCategory",
    value: function getCategory() {
      return Accidental.CATEGORY;
    }
  }, {
    key: "getWidth",
    value: function getWidth() {
      var parenWidth = this.cautionary ? getGlyphWidth(this.parenLeft) + getGlyphWidth(this.parenRight) + this.render_options.parenLeftPadding + this.render_options.parenRightPadding : 0;
      return getGlyphWidth(this.glyph) + parenWidth;
    } // Attach this accidental to `note`, which must be a `StaveNote`.

  }, {
    key: "setNote",
    value: function setNote(note) {
      if (!note) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('ArgumentError', "Bad note value: ".concat(note));
      }

      this.note = note; // Accidentals attached to grace notes are rendered smaller.

      if (this.note.getCategory() === 'gracenotes') {
        this.render_options.font_scale = 25;
        this.reset();
      }
    } // If called, draws parenthesis around accidental.

  }, {
    key: "setAsCautionary",
    value: function setAsCautionary() {
      this.cautionary = true;
      this.render_options.font_scale = 28;
      this.reset();
      return this;
    } // Render accidental onto canvas.

  }, {
    key: "draw",
    value: function draw() {
      var context = this.context,
          type = this.type,
          position = this.position,
          note = this.note,
          index = this.index,
          cautionary = this.cautionary,
          x_shift = this.x_shift,
          y_shift = this.y_shift,
          glyph = this.glyph,
          parenLeft = this.parenLeft,
          parenRight = this.parenRight,
          _this$render_options = this.render_options,
          parenLeftPadding = _this$render_options.parenLeftPadding,
          parenRightPadding = _this$render_options.parenRightPadding;
      this.checkContext();

      if (!(note && index != null)) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoAttachedNote', "Can't draw accidental without a note and index.");
      } // Figure out the start `x` and `y` coordinates for note and index.


      var start = note.getModifierStartXY(position, index);
      var accX = start.x + x_shift;
      var accY = start.y + y_shift;
      L('Rendering: ', type, accX, accY);

      if (!cautionary) {
        glyph.render(context, accX, accY);
      } else {
        // Render the accidental in parentheses.
        parenRight.render(context, accX, accY);
        accX -= getGlyphWidth(parenRight);
        accX -= parenRightPadding;
        accX -= this.accidental.parenRightPaddingAdjustment;
        glyph.render(context, accX, accY);
        accX -= getGlyphWidth(glyph);
        accX -= parenLeftPadding;
        parenLeft.render(context, accX, accY);
      }

      this.setRendered();
    }
  }]);

  return Accidental;
}(_modifier__WEBPACK_IMPORTED_MODULE_4__["Modifier"]);

/***/ }),

/***/ "./src/annotation.js":
/*!***************************!*\
  !*** ./src/annotation.js ***!
  \***************************/
/*! exports provided: Annotation */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Annotation", function() { return Annotation; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
//
// This file implements text annotations as modifiers that can be attached to
// notes.
//
// See `tests/annotation_tests.js` for usage examples.


 // To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (Annotation.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.Annotation', args);
}

var Annotation =
/*#__PURE__*/
function (_Modifier) {
  _inherits(Annotation, _Modifier);

  _createClass(Annotation, null, [{
    key: "format",
    // Arrange annotations within a `ModifierContext`
    value: function format(annotations, state) {
      if (!annotations || annotations.length === 0) return false;
      var width = 0;

      for (var i = 0; i < annotations.length; ++i) {
        var annotation = annotations[i];
        width = Math.max(annotation.getWidth(), width);

        if (annotation.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"].Position.ABOVE) {
          annotation.setTextLine(state.top_text_line);
          state.top_text_line++;
        } else {
          annotation.setTextLine(state.text_line);
          state.text_line++;
        }
      }

      state.left_shift += width / 2;
      state.right_shift += width / 2;
      return true;
    } // ## Prototype Methods
    //
    // Annotations inherit from `Modifier` and is positioned correctly when
    // in a `ModifierContext`.
    // Create a new `Annotation` with the string `text`.

  }, {
    key: "CATEGORY",
    get: function get() {
      return 'annotations';
    } // Text annotations can be positioned and justified relative to the note.

  }, {
    key: "Justify",
    get: function get() {
      return {
        LEFT: 1,
        CENTER: 2,
        RIGHT: 3,
        CENTER_STEM: 4
      };
    }
  }, {
    key: "JustifyString",
    get: function get() {
      return {
        left: Annotation.Justify.LEFT,
        right: Annotation.Justify.RIGHT,
        center: Annotation.Justify.CENTER,
        centerStem: Annotation.Justify.CENTER_STEM
      };
    }
  }, {
    key: "VerticalJustify",
    get: function get() {
      return {
        TOP: 1,
        CENTER: 2,
        BOTTOM: 3,
        CENTER_STEM: 4
      };
    }
  }, {
    key: "VerticalJustifyString",
    get: function get() {
      return {
        above: Annotation.VerticalJustify.TOP,
        top: Annotation.VerticalJustify.TOP,
        below: Annotation.VerticalJustify.BOTTOM,
        bottom: Annotation.VerticalJustify.BOTTOM,
        center: Annotation.VerticalJustify.CENTER,
        centerStem: Annotation.VerticalJustify.CENTER_STEM
      };
    }
  }]);

  function Annotation(text) {
    var _this;

    _classCallCheck(this, Annotation);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Annotation).call(this));

    _this.setAttribute('type', 'Annotation');

    _this.note = null;
    _this.index = null;
    _this.text = text;
    _this.justification = Annotation.Justify.CENTER;
    _this.vert_justification = Annotation.VerticalJustify.TOP;
    _this.font = {
      family: 'Arial',
      size: 10,
      weight: ''
    }; // The default width is calculated from the text.

    _this.setWidth(_tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].textWidth(text));

    return _this;
  }

  _createClass(Annotation, [{
    key: "getCategory",
    value: function getCategory() {
      return Annotation.CATEGORY;
    } // Set font family, size, and weight. E.g., `Arial`, `10pt`, `Bold`.

  }, {
    key: "setFont",
    value: function setFont(family, size, weight) {
      this.font = {
        family: family,
        size: size,
        weight: weight
      };
      return this;
    } // Set vertical position of text (above or below stave). `just` must be
    // a value in `Annotation.VerticalJustify`.

  }, {
    key: "setVerticalJustification",
    value: function setVerticalJustification(just) {
      this.vert_justification = typeof just === 'string' ? Annotation.VerticalJustifyString[just] : just;
      return this;
    } // Get and set horizontal justification. `justification` is a value in
    // `Annotation.Justify`.

  }, {
    key: "getJustification",
    value: function getJustification() {
      return this.justification;
    }
  }, {
    key: "setJustification",
    value: function setJustification(just) {
      this.justification = typeof just === 'string' ? Annotation.JustifyString[just] : just;
      return this;
    } // Render text beside the note.

  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();

      if (!this.note) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoNoteForAnnotation', "Can't draw text annotation without an attached note.");
      }

      this.setRendered();
      var start = this.note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"].Position.ABOVE, this.index); // We're changing context parameters. Save current state.

      this.context.save();
      this.context.setFont(this.font.family, this.font.size, this.font.weight);
      var text_width = this.context.measureText(this.text).width; // Estimate text height to be the same as the width of an 'm'.
      //
      // This is a hack to work around the inability to measure text height
      // in HTML5 Canvas (and SVG).

      var text_height = this.context.measureText('m').width;
      var x;
      var y;

      if (this.justification === Annotation.Justify.LEFT) {
        x = start.x;
      } else if (this.justification === Annotation.Justify.RIGHT) {
        x = start.x - text_width;
      } else if (this.justification === Annotation.Justify.CENTER) {
        x = start.x - text_width / 2;
      } else
        /* CENTER_STEM */
        {
          x = this.note.getStemX() - text_width / 2;
        }

      var stem_ext;
      var spacing;
      var has_stem = this.note.hasStem();
      var stave = this.note.getStave(); // The position of the text varies based on whether or not the note
      // has a stem.

      if (has_stem) {
        stem_ext = this.note.getStem().getExtents();
        spacing = stave.getSpacingBetweenLines();
      }

      if (this.vert_justification === Annotation.VerticalJustify.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_1__["Flow"].TEXT_HEIGHT_OFFSET_HACK);

        if (has_stem) {
          var stem_base = this.note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY;
          y = Math.max(y, stem_base + spacing * (this.text_line + 2));
        }
      } else if (this.vert_justification === Annotation.VerticalJustify.CENTER) {
        var yt = this.note.getYForTopText(this.text_line) - 1;
        var yb = stave.getYForBottomText(this.text_line);
        y = yt + (yb - yt) / 2 + text_height / 2;
      } else if (this.vert_justification === Annotation.VerticalJustify.TOP) {
        y = Math.min(stave.getYForTopText(this.text_line), this.note.getYs()[0] - 10);

        if (has_stem) {
          y = Math.min(y, stem_ext.topY - 5 - spacing * this.text_line);
        }
      } else
        /* CENTER_STEM */
        {
          var extents = this.note.getStemExtents();
          y = extents.topY + (extents.baseY - extents.topY) / 2 + text_height / 2;
        }

      L('Rendering annotation: ', this.text, x, y);
      this.context.fillText(this.text, x, y);
      this.context.restore();
    }
  }]);

  return Annotation;
}(_modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"]);

/***/ }),

/***/ "./src/articulation.js":
/*!*****************************!*\
  !*** ./src/articulation.js ***!
  \*****************************/
/*! exports provided: Articulation */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Articulation", function() { return Articulation; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stem */ "./src/stem.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }

function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }

function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }

function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }

function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }

function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }

function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author: Larry Kuhns.
//
// ## Description
//
// This file implements articulations and accents as modifiers that can be
// attached to notes. The complete list of articulations is available in
// `tables.js` under `Vex.Flow.articulationCodes`.
//
// See `tests/articulation_tests.js` for usage examples.




 // To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (Articulation.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.Articulation', args);
}

var _Modifier$Position = _modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"].Position,
    ABOVE = _Modifier$Position.ABOVE,
    BELOW = _Modifier$Position.BELOW;

var roundToNearestHalf = function roundToNearestHalf(mathFn, value) {
  return mathFn(value / 0.5) * 0.5;
}; // This includes both staff and ledger lines


var isWithinLines = function isWithinLines(line, position) {
  return position === ABOVE ? line <= 5 : line >= 1;
};

var getRoundingFunction = function getRoundingFunction(line, position) {
  if (isWithinLines(line, position)) {
    if (position === ABOVE) {
      return Math.ceil;
    } else {
      return Math.floor;
    }
  } else {
    return Math.round;
  }
};

var snapLineToStaff = function snapLineToStaff(canSitBetweenLines, line, position, offsetDirection) {
  // Initially, snap to nearest staff line or space
  var snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);
  var canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);
  var onStaffLine = snappedLine % 1 === 0;

  if (canSnapToStaffSpace && onStaffLine) {
    var HALF_STAFF_SPACE = 0.5;
    return snappedLine + HALF_STAFF_SPACE * -offsetDirection;
  } else {
    return snappedLine;
  }
};

var isStaveNote = function isStaveNote(note) {
  var noteCategory = note.getCategory();
  return noteCategory === 'stavenotes' || noteCategory === 'gracenotes';
};

var getTopY = function getTopY(note, textLine) {
  var stave = note.getStave();
  var stemDirection = note.getStemDirection();

  var _note$getStemExtents = note.getStemExtents(),
      stemTipY = _note$getStemExtents.topY,
      stemBaseY = _note$getStemExtents.baseY;

  if (isStaveNote(note)) {
    if (note.hasStem()) {
      if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_4__["Stem"].UP) {
        return stemTipY;
      } else {
        return stemBaseY;
      }
    } else {
      return Math.min.apply(Math, _toConsumableArray(note.getYs()));
    }
  } else if (note.getCategory() === 'tabnotes') {
    if (note.hasStem()) {
      if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_4__["Stem"].UP) {
        return stemTipY;
      } else {
        return stave.getYForTopText(textLine);
      }
    } else {
      return stave.getYForTopText(textLine);
    }
  } else {
    throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');
  }
};

var getBottomY = function getBottomY(note, textLine) {
  var stave = note.getStave();
  var stemDirection = note.getStemDirection();

  var _note$getStemExtents2 = note.getStemExtents(),
      stemTipY = _note$getStemExtents2.topY,
      stemBaseY = _note$getStemExtents2.baseY;

  if (isStaveNote(note)) {
    if (note.hasStem()) {
      if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_4__["Stem"].UP) {
        return stemBaseY;
      } else {
        return stemTipY;
      }
    } else {
      return Math.max.apply(Math, _toConsumableArray(note.getYs()));
    }
  } else if (note.getCategory() === 'tabnotes') {
    if (note.hasStem()) {
      if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_4__["Stem"].UP) {
        return stave.getYForBottomText(textLine);
      } else {
        return stemTipY;
      }
    } else {
      return stave.getYForBottomText(textLine);
    }
  } else {
    throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes');
  }
}; // Gets 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 pleasent" 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.


var getInitialOffset = function getInitialOffset(note, position) {
  var isOnStemTip = position === ABOVE && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_4__["Stem"].UP || position === BELOW && note.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_4__["Stem"].DOWN;

  if (isStaveNote(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;
    }
  }
};

var Articulation =
/*#__PURE__*/
function (_Modifier) {
  _inherits(Articulation, _Modifier);

  _createClass(Articulation, null, [{
    key: "format",
    // 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.
    value: function format(articulations, state) {
      if (!articulations || articulations.length === 0) return false;

      var isAbove = function isAbove(artic) {
        return artic.getPosition() === ABOVE;
      };

      var isBelow = function isBelow(artic) {
        return artic.getPosition() === BELOW;
      };

      var margin = 0.5;

      var getIncrement = function getIncrement(articulation, line, position) {
        return roundToNearestHalf(getRoundingFunction(line, position), articulation.glyph.getMetrics().height / 10 + margin);
      };

      articulations.filter(isAbove).forEach(function (articulation) {
        articulation.setTextLine(state.top_text_line);
        state.top_text_line += getIncrement(articulation, state.top_text_line, ABOVE);
      });
      articulations.filter(isBelow).forEach(function (articulation) {
        articulation.setTextLine(state.text_line);
        state.text_line += getIncrement(articulation, state.text_line, BELOW);
      });
      var width = articulations.map(function (articulation) {
        return articulation.getWidth();
      }).reduce(function (maxWidth, articWidth) {
        return Math.max(articWidth, maxWidth);
      });
      state.left_shift += width / 2;
      state.right_shift += width / 2;
      return true;
    }
  }, {
    key: "easyScoreHook",
    value: function easyScoreHook(_ref, note, builder) {
      var articulations = _ref.articulations;
      if (!articulations) return;
      var articNameToCode = {
        staccato: 'a.',
        tenuto: 'a-'
      };
      articulations.split(',').map(function (articString) {
        return articString.trim().split('.');
      }).map(function (_ref2) {
        var _ref3 = _slicedToArray(_ref2, 2),
            name = _ref3[0],
            position = _ref3[1];

        var artic = {
          type: articNameToCode[name]
        };
        if (position) artic.position = _modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"].PositionString[position];
        return builder.getFactory().Articulation(artic);
      }).map(function (artic) {
        return note.addModifier(0, artic);
      });
    } // Create a new articulation of type `type`, which is an entry in
    // `Vex.Flow.articulationCodes` in `tables.js`.

  }, {
    key: "CATEGORY",
    get: function get() {
      return 'articulations';
    }
  }, {
    key: "INITIAL_OFFSET",
    get: function get() {
      return -0.5;
    }
  }]);

  function Articulation(type) {
    var _this;

    _classCallCheck(this, Articulation);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Articulation).call(this));

    _this.setAttribute('type', 'Articulation');

    _this.note = null;
    _this.index = null;
    _this.type = type;
    _this.position = BELOW;
    _this.render_options = {
      font_scale: 38
    };

    _this.reset();

    return _this;
  }

  _createClass(Articulation, [{
    key: "reset",
    value: function reset() {
      this.articulation = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].articulationCodes(this.type);

      if (!this.articulation) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('ArgumentError', "Articulation not found: ".concat(this.type));
      }

      var code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;
      this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_3__["Glyph"](code, this.render_options.font_scale);
      this.setWidth(this.glyph.getMetrics().width);
    }
  }, {
    key: "getCategory",
    value: function getCategory() {
      return Articulation.CATEGORY;
    } // Render articulation in position next to note.

  }, {
    key: "draw",
    value: function draw() {
      var _ABOVE$BELOW$position;

      var note = this.note,
          index = this.index,
          position = this.position,
          glyph = this.glyph,
          canSitBetweenLines = this.articulation.between_lines,
          textLine = this.text_line,
          ctx = this.context;
      this.checkContext();

      if (!note || index == null) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoAttachedNote', "Can't draw Articulation without a note and index.");
      }

      this.setRendered();
      var stave = note.getStave();
      var staffSpace = stave.getSpacingBetweenLines();
      var isTab = note.getCategory() === 'tabnotes'; // Articulations are centered over/under the note head.

      var _note$getModifierStar = note.getModifierStartXY(position, index),
          x = _note$getModifierStar.x;

      var shouldSitOutsideStaff = !canSitBetweenLines || isTab;
      var initialOffset = getInitialOffset(note, position);
      var padding = this.musicFont.lookupMetric("articulation.".concat(glyph.getCode(), ".padding"), 0);
      var y = (_ABOVE$BELOW$position = {}, _defineProperty(_ABOVE$BELOW$position, ABOVE, function () {
        glyph.setOrigin(0.5, 1);
        var y = getTopY(note, textLine) - (textLine + initialOffset) * staffSpace;
        return shouldSitOutsideStaff ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y) : y;
      }), _defineProperty(_ABOVE$BELOW$position, BELOW, function () {
        glyph.setOrigin(0.5, 0);
        var y = getBottomY(note, textLine) + (textLine + initialOffset) * staffSpace;
        return shouldSitOutsideStaff ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y) : y;
      }), _ABOVE$BELOW$position)[position]();

      if (!isTab) {
        var offsetDirection = position === ABOVE ? -1 : +1;
        var noteLine = isTab ? note.positions[index].str : note.getKeyProps()[index].line;
        var distanceFromNote = (note.getYs()[index] - y) / staffSpace;
        var articLine = distanceFromNote + noteLine;
        var 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: ".concat(x, ", y: ").concat(y, ")"));
      glyph.render(ctx, x, y);
    }
  }]);

  return Articulation;
}(_modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"]);

/***/ }),

/***/ "./src/barnote.js":
/*!************************!*\
  !*** ./src/barnote.js ***!
  \************************/
/*! exports provided: BarNote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BarNote", function() { return BarNote; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.js");
/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }

function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
//
// A `BarNote` is used to render bar lines (from `barline.js`). `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.js` for usage examples.


 // To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (BarNote.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.BarNote', args);
}

var BarNote =
/*#__PURE__*/
function (_Note) {
  _inherits(BarNote, _Note);

  function BarNote() {
    var _this$metrics$widths;

    var _this;

    var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _stavebarline__WEBPACK_IMPORTED_MODULE_2__["Barline"].type.SINGLE;

    _classCallCheck(this, BarNote);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(BarNote).call(this, {
      duration: 'b'
    }));

    _this.setAttribute('type', 'BarNote');

    _this.metrics = {
      widths: {}
    };
    var TYPE = _stavebarline__WEBPACK_IMPORTED_MODULE_2__["Barline"].type;
    _this.metrics.widths = (_this$metrics$widths = {}, _defineProperty(_this$metrics$widths, TYPE.SINGLE, 8), _defineProperty(_this$metrics$widths, TYPE.DOUBLE, 12), _defineProperty(_this$metrics$widths, TYPE.END, 15), _defineProperty(_this$metrics$widths, TYPE.REPEAT_BEGIN, 14), _defineProperty(_this$metrics$widths, TYPE.REPEAT_END, 14), _defineProperty(_this$metrics$widths, TYPE.REPEAT_BOTH, 18), _defineProperty(_this$metrics$widths, TYPE.NONE, 0), _this$metrics$widths); // Tell the formatter that bar notes have no duration.

    _this.ignore_ticks = true;

    _this.setType(type);

    return _this;
  } // Get and set the type of Bar note. `type` must be one of `Vex.Flow.Barline.type`.


  _createClass(BarNote, [{
    key: "getType",
    value: function getType() {
      return this.type;
    }
  }, {
    key: "setType",
    value: function setType(type) {
      this.type = typeof type === 'string' ? _stavebarline__WEBPACK_IMPORTED_MODULE_2__["Barline"].typeString[type] : type; // Set width to width of relevant `Barline`.

      this.setWidth(this.metrics.widths[this.type]);
      return this;
    }
  }, {
    key: "getBoundingBox",
    value: function getBoundingBox() {
      return _get(_getPrototypeOf(BarNote.prototype), "getBoundingBox", this).call(this);
    }
  }, {
    key: "addToModifierContext",
    value: function addToModifierContext() {
      /* overridden to ignore */
      return this;
    }
  }, {
    key: "preFormat",
    value: function preFormat() {
      /* overridden to ignore */
      this.setPreFormatted(true);
      return this;
    } // Render note to stave.

  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();
      if (!this.stave) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoStave', "Can't draw without a stave.");
      L('Rendering bar line at: ', this.getAbsoluteX());
      var barline = new _stavebarline__WEBPACK_IMPORTED_MODULE_2__["Barline"](this.type);
      barline.setX(this.getAbsoluteX());
      barline.draw(this.stave);
      this.setRendered();
    }
  }]);

  return BarNote;
}(_note__WEBPACK_IMPORTED_MODULE_1__["Note"]);

/***/ }),

/***/ "./src/beam.js":
/*!*********************!*\
  !*** ./src/beam.js ***!
  \*********************/
/*! exports provided: Beam */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Beam", function() { return Beam; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fraction */ "./src/fraction.js");
/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.js");
/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stem */ "./src/stem.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }

function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }

function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }

function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
//
// This file implements `Beams` that span over a set of `StemmableNotes`.







function calculateStemDirection(notes) {
  var lineSum = 0;
  notes.forEach(function (note) {
    if (note.keyProps) {
      note.keyProps.forEach(function (keyProp) {
        lineSum += keyProp.line - 3;
      });
    }
  });

  if (lineSum >= 0) {
    return _stem__WEBPACK_IMPORTED_MODULE_5__["Stem"].DOWN;
  }

  return _stem__WEBPACK_IMPORTED_MODULE_5__["Stem"].UP;
}

var getStemSlope = function getStemSlope(firstNote, lastNote) {
  var firstStemTipY = firstNote.getStemExtents().topY;
  var firstStemX = firstNote.getStemX();
  var lastStemTipY = lastNote.getStemExtents().topY;
  var lastStemX = lastNote.getStemX();
  return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);
};

var BEAM_LEFT = 'L';
var BEAM_RIGHT = 'R';
var BEAM_BOTH = 'B';
var Beam =
/*#__PURE__*/
function (_Element) {
  _inherits(Beam, _Element);

  _createClass(Beam, null, [{
    key: "getDefaultBeamGroups",
    // Gets the default beam groups for a provided time signature.
    // Attempts to guess if the time signature is not found in table.
    // Currently this is fairly naive.
    value: function getDefaultBeamGroups(time_sig) {
      if (!time_sig || time_sig === 'c') {
        time_sig = '4/4';
      }

      var 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']
      };
      var groups = defaults[time_sig];

      if (groups === undefined) {
        // If no beam groups found, naively determine
        // the beam groupings from the time signature
        var beatTotal = parseInt(time_sig.split('/')[0], 10);
        var beatValue = parseInt(time_sig.split('/')[1], 10);
        var tripleMeter = beatTotal % 3 === 0;

        if (tripleMeter) {
          return [new _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"](3, beatValue)];
        } else if (beatValue > 4) {
          return [new _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"](2, beatValue)];
        } else if (beatValue <= 4) {
          return [new _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"](1, beatValue)];
        }
      } else {
        return groups.map(function (group) {
          return new _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"]().parse(group);
        });
      }

      return [new _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"](1, 4)];
    } // A helper function to automatically build basic beams for a voice. For more
    // complex auto-beaming use `Beam.generateBeams()`.
    //
    // Parameters:
    // * `voice` - The voice to generate the beams for
    // * `stem_direction` - A stem direction to apply to the entire voice
    // * `groups` - An array of `Fraction` representing beat groupings for the beam

  }, {
    key: "applyAndGetBeams",
    value: function applyAndGetBeams(voice, stem_direction, groups) {
      return Beam.generateBeams(voice.getTickables(), {
        groups: groups,
        stem_direction: 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
    // };
    // ```
    //
    // Parameters:
    // * `notes` - An array of notes to create the beams for
    // * `config` - The configuration object
    //    * `groups` - Array of `Fractions` that represent the beat structure to beam the notes
    //    * `stem_direction` - Set to apply the same direction to all notes
    //    * `beam_rests` - Set to `true` to include rests in the beams
    //    * `beam_middle_only` - Set to `true` to only beam rests in the middle of the beat
    //    * `show_stemlets` - Set to `true` to draw stemlets for rests
    //    * `maintain_stem_directions` - Set to `true` to not apply new stem directions
    //

  }, {
    key: "generateBeams",
    value: function generateBeams(notes, config) {
      if (!config) config = {};

      if (!config.groups || !config.groups.length) {
        config.groups = [new _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"](2, 8)];
      } // Convert beam groups to tick amounts


      var tickGroups = config.groups.map(function (group) {
        if (!group.multiply) {
          throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('InvalidBeamGroups', 'The beam groups must be an array of Vex.Flow.Fractions');
        }

        return group.clone().multiply(_tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].RESOLUTION, 1);
      });
      var unprocessedNotes = notes;
      var currentTickGroup = 0;
      var noteGroups = [];
      var currentGroup = [];

      function getTotalTicks(vf_notes) {
        return vf_notes.reduce(function (memo, note) {
          return note.getTicks().clone().add(memo);
        }, new _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"](0, 1));
      }

      function nextTickGroup() {
        if (tickGroups.length - 1 > currentTickGroup) {
          currentTickGroup += 1;
        } else {
          currentTickGroup = 0;
        }
      }

      function createGroups() {
        var nextGroup = [];
        unprocessedNotes.forEach(function (unprocessedNote) {
          nextGroup = [];

          if (unprocessedNote.shouldIgnoreTicks()) {
            noteGroups.push(currentGroup);
            currentGroup = nextGroup;
            return; // Ignore untickables (like bar notes)
          }

          currentGroup.push(unprocessedNote);
          var ticksPerGroup = tickGroups[currentTickGroup].clone();
          var totalTicks = getTotalTicks(currentGroup); // Double the amount of ticks in a group, if it's an unbeamable tuplet

          var unbeamable = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].durationToNumber(unprocessedNote.duration) < 8;

          if (unbeamable && unprocessedNote.tuplet) {
            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) {
              nextGroup.push(currentGroup.pop());
            }

            noteGroups.push(currentGroup);
            currentGroup = nextGroup;
            nextTickGroup();
          } else if (totalTicks.equals(ticksPerGroup)) {
            noteGroups.push(currentGroup);
            currentGroup = nextGroup;
            nextTickGroup();
          }
        }); // Adds any remainder notes

        if (currentGroup.length > 0) {
          noteGroups.push(currentGroup);
        }
      }

      function getBeamGroups() {
        return noteGroups.filter(function (group) {
          if (group.length > 1) {
            var beamable = true;
            group.forEach(function (note) {
              if (note.getIntrinsicTicks() >= _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].durationToTicks('4')) {
                beamable = false;
              }
            });
            return beamable;
          }

          return false;
        });
      } // Splits up groups by Rest


      function sanitizeGroups() {
        var sanitizedGroups = [];
        noteGroups.forEach(function (group) {
          var tempGroup = [];
          group.forEach(function (note, index, group) {
            var isFirstOrLast = index === 0 || index === group.length - 1;
            var prevNote = group[index - 1];
            var breaksOnEachRest = !config.beam_rests && note.isRest();
            var breaksOnFirstOrLastRest = config.beam_rests && config.beam_middle_only && note.isRest() && isFirstOrLast;
            var breakOnStemChange = false;

            if (config.maintain_stem_directions && prevNote && !note.isRest() && !prevNote.isRest()) {
              var prevDirection = prevNote.getStemDirection();
              var currentDirection = note.getStemDirection();
              breakOnStemChange = currentDirection !== prevDirection;
            }

            var isUnbeamableDuration = parseInt(note.duration, 10) < 8; // Determine if the group should be broken at this note

            var 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(function (group) {
          var stemDirection;

          if (config.maintain_stem_directions) {
            var _note = findFirstNote(group);

            stemDirection = _note ? _note.getStemDirection() : _stem__WEBPACK_IMPORTED_MODULE_5__["Stem"].UP;
          } else {
            if (config.stem_direction) {
              stemDirection = config.stem_direction;
            } else {
              stemDirection = calculateStemDirection(group);
            }
          }

          applyStemDirection(group, stemDirection);
        });
      }

      function findFirstNote(group) {
        for (var _i = 0; _i < group.length; _i++) {
          var _note2 = group[_i];

          if (!_note2.isRest()) {
            return _note2;
          }
        }

        return false;
      }

      function applyStemDirection(group, direction) {
        group.forEach(function (note) {
          note.setStemDirection(direction);
        });
      } // Get all of the tuplets in all of the note groups


      function getTuplets() {
        var uniqueTuplets = []; // Go through all of the note groups and inspect for tuplets

        noteGroups.forEach(function (group) {
          var tuplet = null;
          group.forEach(function (note) {
            if (note.tuplet && tuplet !== note.tuplet) {
              tuplet = note.tuplet;
              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

      var beamedNoteGroups = getBeamGroups(); // Get the tuplets in order to format them accurately

      var allTuplets = getTuplets(); // Create a Vex.Flow.Beam from each group of notes to be beamed

      var beams = [];
      beamedNoteGroups.forEach(function (group) {
        var 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_1__["Flow"].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(function (tuplet) {
        // Set the tuplet location based on the stem direction
        var direction = tuplet.notes[0].stem_direction === _stem__WEBPACK_IMPORTED_MODULE_5__["Stem"].DOWN ? _tuplet__WEBPACK_IMPORTED_MODULE_4__["Tuplet"].LOCATION_BOTTOM : _tuplet__WEBPACK_IMPORTED_MODULE_4__["Tuplet"].LOCATION_TOP;
        tuplet.setTupletLocation(direction); // If any of the notes in the tuplet are not beamed, draw a bracket.

        var bracketed = false;

        for (var _i2 = 0; _i2 < tuplet.notes.length; _i2++) {
          var _note3 = tuplet.notes[_i2];

          if (_note3.beam === null) {
            bracketed = true;
            break;
          }
        }

        tuplet.setBracketed(bracketed);
      });
      return beams;
    }
  }]);

  function Beam(notes, auto_stem) {
    var _this;

    _classCallCheck(this, Beam);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Beam).call(this));

    _this.setAttribute('type', 'Beam');

    if (!notes || notes === []) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', 'No notes provided for beam.');
    }

    if (notes.length === 1) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].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_1__["Flow"].durationToTicks('4')) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', 'Beams can only be applied to notes shorter than a quarter note.');
    }

    var i; // shared iterator

    var note;
    _this.stem_direction = _stem__WEBPACK_IMPORTED_MODULE_5__["Stem"].UP;

    for (i = 0; i < notes.length; ++i) {
      note = notes[i];

      if (note.hasStem()) {
        _this.stem_direction = note.getStemDirection();
        break;
      }
    }

    var stem_direction = _this.stem_direction; // Figure out optimal stem direction based on given notes

    if (auto_stem && notes[0].getCategory() === 'stavenotes') {
      stem_direction = calculateStemDirection(notes);
    } else if (auto_stem && notes[0].getCategory() === 'tabnotes') {
      // Auto Stem TabNotes
      var stem_weight = notes.reduce(function (memo, note) {
        return memo + note.stem_direction;
      }, 0);
      stem_direction = stem_weight > -1 ? _stem__WEBPACK_IMPORTED_MODULE_5__["Stem"].UP : _stem__WEBPACK_IMPORTED_MODULE_5__["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(_assertThisInitialized(_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
    };
    return _this;
  } // Get the notes in this beam


  _createClass(Beam, [{
    key: "getNotes",
    value: function getNotes() {
      return this.notes;
    } // Get the max number of beams in the set of notes

  }, {
    key: "getBeamCount",
    value: function getBeamCount() {
      var beamCounts = this.notes.map(function (note) {
        return note.getGlyph().beam_count;
      });
      var maxBeamCount = beamCounts.reduce(function (max, beamCount) {
        return beamCount > max ? beamCount : max;
      });
      return maxBeamCount;
    } // Set which note `indices` to break the secondary beam at

  }, {
    key: "breakSecondaryAt",
    value: function breakSecondaryAt(indices) {
      this.break_on_indices = indices;
      return this;
    } // Return the y coordinate for linear function

  }, {
    key: "getSlopeY",
    value: 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

  }, {
    key: "calculateSlope",
    value: function calculateSlope() {
      var notes = this.notes,
          stemDirection = this.stem_direction,
          _this$render_options = this.render_options,
          max_slope = _this$render_options.max_slope,
          min_slope = _this$render_options.min_slope,
          slope_iterations = _this$render_options.slope_iterations,
          slope_cost = _this$render_options.slope_cost;
      var firstNote = notes[0];
      var initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);
      var increment = (max_slope - min_slope) / slope_iterations;
      var minCost = Number.MAX_VALUE;
      var bestSlope = 0;
      var yShift = 0; // iterate through slope values to find best weighted fit

      for (var slope = min_slope; slope <= max_slope; slope += increment) {
        var totalStemExtension = 0;
        var yShiftTemp = 0; // iterate through notes, calculating y shift and stem extension

        for (var _i3 = 1; _i3 < notes.length; ++_i3) {
          var _note4 = notes[_i3];
          var adjustedStemTipY = this.getSlopeY(_note4.getStemX(), firstNote.getStemX(), firstNote.getStemExtents().topY, slope) + yShiftTemp;

          var stemTipY = _note4.getStemExtents().topY; // beam needs to be shifted up to accommodate note


          if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {
            var diff = Math.abs(stemTipY - adjustedStemTipY);
            yShiftTemp += diff * -stemDirection;
            totalStemExtension += diff * _i3;
          } 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;


        var idealSlope = initialSlope / 2;
        var 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

        var 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

  }, {
    key: "calculateFlatSlope",
    value: function calculateFlatSlope() {
      var notes = this.notes,
          stem_direction = this.stem_direction,
          _this$render_options2 = this.render_options,
          beam_width = _this$render_options2.beam_width,
          min_flat_beam_offset = _this$render_options2.min_flat_beam_offset,
          flat_beam_offset = _this$render_options2.flat_beam_offset; // If a flat beam offset has not yet been supplied or calculated,
      // generate one based on the notes in this particular note group

      var total = 0;
      var extremeY = 0; // Store the highest or lowest note here

      var extremeBeamCount = 0; // The beam count of the extreme note

      var currentExtreme = 0;

      for (var _i4 = 0; _i4 < notes.length; _i4++) {
        // Total up all of the offsets so we can average them out later
        var _note5 = notes[_i4];

        var stemTipY = _note5.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_5__["Stem"].DOWN && currentExtreme < stemTipY) {
          currentExtreme = stemTipY;
          extremeY = Math.max.apply(Math, _toConsumableArray(_note5.getYs()));
          extremeBeamCount = _note5.getBeamCount();
        } else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_5__["Stem"].UP && (currentExtreme === 0 || currentExtreme > stemTipY)) {
          currentExtreme = stemTipY;
          extremeY = Math.min.apply(Math, _toConsumableArray(_note5.getYs()));
          extremeBeamCount = _note5.getBeamCount();
        }
      } // Average the offsets to try and come up with a reasonable one that
      //  works for all of the notes in the beam group.


      var 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.

      var beamWidth = beam_width * 1.5;
      var extremeTest = min_flat_beam_offset + extremeBeamCount * beamWidth;
      var newOffset = extremeY + extremeTest * -stem_direction;

      if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_5__["Stem"].DOWN && offset < newOffset) {
        offset = extremeY + extremeTest;
      } else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_5__["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_5__["Stem"].DOWN && offset > flat_beam_offset) {
        this.render_options.flat_beam_offset = offset;
      } else if (stem_direction === _stem__WEBPACK_IMPORTED_MODULE_5__["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;
    }
  }, {
    key: "getBeamYToDraw",
    value: function getBeamYToDraw() {
      var firstNote = this.notes[0];
      var firstStemTipY = firstNote.getStemExtents().topY;
      var 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.

  }, {
    key: "applyStemExtensions",
    value: function applyStemExtensions() {
      var notes = this.notes,
          slope = this.slope,
          y_shift = this.y_shift,
          stem_direction = this.stem_direction,
          beam_count = this.beam_count,
          _this$render_options3 = this.render_options,
          show_stemlets = _this$render_options3.show_stemlets,
          stemlet_extension = _this$render_options3.stemlet_extension,
          beam_width = _this$render_options3.beam_width;
      var firstNote = notes[0];
      var firstStemTipY = this.getBeamYToDraw();
      var firstStemX = firstNote.getStemX();

      for (var _i5 = 0; _i5 < notes.length; ++_i5) {
        var _note6 = notes[_i5];

        var stemX = _note6.getStemX();

        var _note6$getStemExtents = _note6.getStemExtents(),
            stemTipY = _note6$getStemExtents.topY;

        var beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;

        var preBeamExtension = _note6.getStem().getExtension();

        var beamExtension = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_5__["Stem"].UP ? stemTipY - beamedStemTipY : beamedStemTipY - stemTipY;

        _note6.stem.setExtension(preBeamExtension + beamExtension);

        _note6.stem.renderHeightAdjustment = -_stem__WEBPACK_IMPORTED_MODULE_5__["Stem"].WIDTH / 2;

        if (_note6.isRest() && show_stemlets) {
          var beamWidth = beam_width;
          var totalBeamWidth = (beam_count - 1) * beamWidth * 1.5 + beamWidth;

          _note6.stem.setVisibility(true).setStemlet(true, totalBeamWidth + stemlet_extension);
        }
      }
    } // return upper level beam direction.

  }, {
    key: "lookupBeamDirection",
    value: function lookupBeamDirection(duration, prev_tick, tick, next_tick) {
      if (duration === '4') {
        return BEAM_LEFT;
      }

      var lookup_duration = "".concat(_tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].durationToNumber(duration) / 2);
      var prev_note_gets_beam = prev_tick < _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].durationToTicks(lookup_duration);
      var next_note_gets_beam = next_tick < _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].durationToTicks(lookup_duration);
      var note_gets_beam = tick < _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].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);
    } // Get the x coordinates for the beam lines of specific `duration`

  }, {
    key: "getBeamLines",
    value: function getBeamLines(duration) {
      var tick_of_duration = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].durationToTicks(duration);
      var beam_lines = [];
      var beam_started = false;
      var current_beam = null;
      var partial_beam_length = this.render_options.partial_beam_length;
      var previous_should_break = false;
      var tick_tally = 0;

      for (var _i6 = 0; _i6 < this.notes.length; ++_i6) {
        var _note7 = this.notes[_i6]; // See if we need to break secondary beams on this note.

        var ticks = _note7.ticks.value();

        tick_tally += ticks;
        var 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(_i6) !== -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;
          }
        }

        var note_gets_beam = _note7.getIntrinsicTicks() < tick_of_duration;
        var stem_x = _note7.getStemX() - _stem__WEBPACK_IMPORTED_MODULE_5__["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.

        var prev_note = this.notes[_i6 - 1];
        var next_note = this.notes[_i6 + 1];
        var next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;
        var prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;
        var 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 === null) {
                // 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: null
            };
            beam_started = true;

            if (beam_alone) {
              // previous and next beam exists and does not get a beam but current gets it.
              var prev_tick = prev_note.getIntrinsicTicks();
              var next_tick = next_note.getIntrinsicTicks();

              var tick = _note7.getIntrinsicTicks();

              var beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick);

              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 || _i6 === 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


      var last_beam = beam_lines[beam_lines.length - 1];

      if (last_beam && last_beam.end === null) {
        last_beam.end = last_beam.start - partial_beam_length;
      }

      return beam_lines;
    } // Render the stems for each notes

  }, {
    key: "drawStems",
    value: function drawStems() {
      var _this2 = this;

      this.notes.forEach(function (note) {
        if (note.getStem()) {
          note.getStem().setContext(_this2.context).draw();
        }
      }, this);
    } // Render the beam lines

  }, {
    key: "drawBeamLines",
    value: function drawBeamLines() {
      this.checkContext();
      var valid_beam_durations = ['4', '8', '16', '32', '64'];
      var firstNote = this.notes[0];
      var beamY = this.getBeamYToDraw();
      var firstStemX = firstNote.getStemX();
      var beamThickness = this.render_options.beam_width * this.stem_direction; // Draw the beams.

      for (var _i7 = 0; _i7 < valid_beam_durations.length; ++_i7) {
        var duration = valid_beam_durations[_i7];
        var beamLines = this.getBeamLines(duration);

        for (var j = 0; j < beamLines.length; ++j) {
          var beam_line = beamLines[j];
          var startBeamX = beam_line.start;
          var startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);
          var lastBeamX = beam_line.end;
          var lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);
          this.context.beginPath();
          this.context.moveTo(startBeamX, startBeamY);
          this.context.lineTo(startBeamX, startBeamY + beamThickness);
          this.context.lineTo(lastBeamX + 1, lastBeamY + beamThickness);
          this.context.lineTo(lastBeamX + 1, lastBeamY);
          this.context.closePath();
          this.context.fill();
        }

        beamY += beamThickness * 1.5;
      }
    } // Pre-format the beam

  }, {
    key: "preFormat",
    value: function 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

  }, {
    key: "postFormat",
    value: function postFormat() {
      if (this.postFormatted) return; // Calculate a smart slope if we're not forcing the beams to be flat.

      if (this.notes[0].getCategory() === 'tabnotes' || this.render_options.flat_beams) {
        this.calculateFlatSlope();
      } else {
        this.calculateSlope();
      }

      this.applyStemExtensions();
      this.postFormatted = true;
    } // Render the beam to the canvas context

  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();
      this.setRendered();
      if (this.unbeamable) return;

      if (!this.postFormatted) {
        this.postFormat();
      }

      this.drawStems();
      this.applyStyle();
      this.drawBeamLines();
      this.restoreStyle();
    }
  }]);

  return Beam;
}(_element__WEBPACK_IMPORTED_MODULE_2__["Element"]);

/***/ }),

/***/ "./src/bend.js":
/*!*********************!*\
  !*** ./src/bend.js ***!
  \*********************/
/*! exports provided: Bend */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Bend", function() { return Bend; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
//
// This file implements tablature bends.



/**
   @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.

   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;
     }]
 */

var Bend =
/*#__PURE__*/
function (_Modifier) {
  _inherits(Bend, _Modifier);

  _createClass(Bend, null, [{
    key: "format",
    // ## Static Methods
    // Arrange bends in `ModifierContext`
    value: function format(bends, state) {
      if (!bends || bends.length === 0) return false;
      var last_width = 0; // Bends are always on top.

      var text_line = state.top_text_line; // Format Bends

      for (var i = 0; i < bends.length; ++i) {
        var bend = bends[i];
        bend.setXShift(last_width);
        last_width = bend.getWidth();
        bend.setTextLine(text_line);
      }

      state.right_shift += last_width;
      state.top_text_line += 1;
      return true;
    } // ## Prototype Methods

  }, {
    key: "CATEGORY",
    get: function get() {
      return 'bends';
    }
  }, {
    key: "UP",
    get: function get() {
      return 0;
    }
  }, {
    key: "DOWN",
    get: function get() {
      return 1;
    }
  }]);

  function Bend(text, release, phrase) {
    var _this;

    _classCallCheck(this, Bend);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Bend).call(this));

    _this.setAttribute('type', 'Bend');

    _this.text = text;
    _this.x_shift = 0;
    _this.release = release || false;
    _this.font = '10pt Arial';
    _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();

    return _this;
  }

  _createClass(Bend, [{
    key: "getCategory",
    value: function getCategory() {
      return Bend.CATEGORY;
    }
  }, {
    key: "setXShift",
    value: function setXShift(value) {
      this.x_shift = value;
      this.updateWidth();
    }
  }, {
    key: "setFont",
    value: function setFont(font) {
      this.font = font;
      return this;
    }
  }, {
    key: "getText",
    value: function getText() {
      return this.text;
    }
  }, {
    key: "updateWidth",
    value: function updateWidth() {
      var that = this;

      function measure_text(text) {
        var text_width;

        if (that.context) {
          text_width = that.context.measureText(text).width;
        } else {
          text_width = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].textWidth(text);
        }

        return text_width;
      }

      var total_width = 0;

      for (var i = 0; i < this.phrase.length; ++i) {
        var bend = this.phrase[i];

        if ('width' in bend) {
          total_width += bend.width;
        } else {
          var additional_width = bend.type === Bend.UP ? this.render_options.bend_width : this.render_options.release_width;
          bend.width = _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Max(additional_width, measure_text(bend.text)) + 3;
          bend.draw_width = bend.width / 2;
          total_width += bend.width;
        }
      }

      this.setWidth(total_width + this.x_shift);
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();

      if (!(this.note && this.index != null)) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoNoteForBend', "Can't draw bend without a note or index.");
      }

      this.setRendered();
      var start = this.note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"].Position.RIGHT, this.index);
      start.x += 3;
      start.y += 0.5;
      var x_shift = this.x_shift;
      var ctx = this.context;
      var bend_height = this.note.getStave().getYForTopText(this.text_line) + 3;
      var annotation_y = this.note.getStave().getYForTopText(this.text_line) - 1;
      var that = this;

      function renderBend(x, y, width, height) {
        var cp_x = x + width;
        var cp_y = y;
        ctx.save();
        ctx.beginPath();
        ctx.setLineWidth(that.render_options.line_width);
        ctx.setStrokeStyle(that.render_options.line_style);
        ctx.setFillStyle(that.render_options.line_style);
        ctx.moveTo(x, y);
        ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);
        ctx.stroke();
        ctx.restore();
      }

      function renderRelease(x, y, width, height) {
        ctx.save();
        ctx.beginPath();
        ctx.setLineWidth(that.render_options.line_width);
        ctx.setStrokeStyle(that.render_options.line_style);
        ctx.setFillStyle(that.render_options.line_style);
        ctx.moveTo(x, height);
        ctx.quadraticCurveTo(x + width, height, x + width, y);
        ctx.stroke();
        ctx.restore();
      }

      function renderArrowHead(x, y, direction) {
        var width = 4;
        var dir = direction || 1;
        ctx.beginPath();
        ctx.moveTo(x, y);
        ctx.lineTo(x - width, y + width * dir);
        ctx.lineTo(x + width, y + width * dir);
        ctx.closePath();
        ctx.fill();
      }

      function renderText(x, text) {
        ctx.save();
        ctx.setRawFont(that.font);
        var render_x = x - ctx.measureText(text).width / 2;
        ctx.fillText(text, render_x, annotation_y);
        ctx.restore();
      }

      var last_bend = null;
      var last_drawn_width = 0;

      for (var i = 0; i < this.phrase.length; ++i) {
        var bend = this.phrase[i];
        if (i === 0) bend.draw_width += x_shift;
        last_drawn_width = bend.draw_width + (last_bend ? last_bend.draw_width : 0) - (i === 1 ? x_shift : 0);

        if (bend.type === Bend.UP) {
          if (last_bend && last_bend.type === Bend.UP) {
            renderArrowHead(start.x, bend_height);
          }

          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 === null) {
            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.x = start.x;
        start.x += last_drawn_width;
      } // Final arrowhead and text


      if (last_bend.type === Bend.UP) {
        renderArrowHead(last_bend.x + last_drawn_width, bend_height);
      } else if (last_bend.type === Bend.DOWN) {
        renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);
      }
    }
  }]);

  return Bend;
}(_modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"]);

/***/ }),

/***/ "./src/boundingbox.js":
/*!****************************!*\
  !*** ./src/boundingbox.js ***!
  \****************************/
/*! exports provided: BoundingBox */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BoundingBox", function() { return BoundingBox; });
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// Vex Music Notation
// Mohit Muthanna <mohit@muthanna.com>
//
// Copyright Mohit Muthanna 2010
// Bounding boxes for interactive notation
var BoundingBox =
/*#__PURE__*/
function () {
  _createClass(BoundingBox, null, [{
    key: "copy",
    value: function copy(that) {
      return new BoundingBox(that.x, that.y, that.w, that.h);
    }
  }]);

  function BoundingBox(x, y, w, h) {
    _classCallCheck(this, BoundingBox);

    this.x = x;
    this.y = y;
    this.w = w;
    this.h = h;
  }

  _createClass(BoundingBox, [{
    key: "getX",
    value: function getX() {
      return this.x;
    }
  }, {
    key: "getY",
    value: function getY() {
      return this.y;
    }
  }, {
    key: "getW",
    value: function getW() {
      return this.w;
    }
  }, {
    key: "getH",
    value: function getH() {
      return this.h;
    }
  }, {
    key: "setX",
    value: function setX(x) {
      this.x = x;
      return this;
    }
  }, {
    key: "setY",
    value: function setY(y) {
      this.y = y;
      return this;
    }
  }, {
    key: "setW",
    value: function setW(w) {
      this.w = w;
      return this;
    }
  }, {
    key: "setH",
    value: function setH(h) {
      this.h = h;
      return this;
    }
  }, {
    key: "move",
    value: function move(x, y) {
      this.x += x;
      this.y += y;
    }
  }, {
    key: "clone",
    value: function 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.

  }, {
    key: "mergeWith",
    value: function mergeWith(boundingBox, ctx) {
      var that = boundingBox;
      var new_x = this.x < that.x ? this.x : that.x;
      var new_y = this.y < that.y ? this.y : that.y;
      var new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;
      var 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;
      if (ctx) this.draw(ctx);
      return this;
    }
  }, {
    key: "draw",
    value: function draw(ctx, x, y) {
      if (!x) x = 0;
      if (!y) y = 0;
      ctx.rect(this.x + x, this.y + y, this.w, this.h);
      ctx.stroke();
    }
  }]);

  return BoundingBox;
}();

/***/ }),

/***/ "./src/boundingboxcomputation.js":
/*!***************************************!*\
  !*** ./src/boundingboxcomputation.js ***!
  \***************************************/
/*! exports provided: BoundingBoxComputation */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BoundingBoxComputation", function() { return BoundingBoxComputation; });
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// ## Description
//
// Object which computes metrics for a bounding box by continuously
// taking canvas path commands
// Warning: This file is merely a crutch to get bounding box information without
// explicit metadata. This is likely to get deprecated following SMuFL support.
//
// taken from: https://github.com/gabelerner/canvg/blob/860e418aca67b9a41e858a223d74d375793ec364/ca
// nvg.js#L449
var BoundingBoxComputation =
/*#__PURE__*/
function () {
  function BoundingBoxComputation(x1, y1, x2, y2) {
    _classCallCheck(this, BoundingBoxComputation);

    // pass in initial points if you want
    this.x1 = Number.NaN;
    this.y1 = Number.NaN;
    this.x2 = Number.NaN;
    this.y2 = Number.NaN;
    this.addPoint(x1, y1);
    this.addPoint(x2, y2);
  }

  _createClass(BoundingBoxComputation, [{
    key: "width",
    value: function width() {
      return this.x2 - this.x1;
    }
  }, {
    key: "height",
    value: function height() {
      return this.y2 - this.y1;
    }
  }, {
    key: "noOp",
    value: function noOp() {// do nothing
    }
  }, {
    key: "addPoint",
    value: function addPoint(x, y) {
      if (x != null) {
        if (isNaN(this.x1) || isNaN(this.x2)) {
          this.x1 = x;
          this.x2 = x;
        }

        if (x < this.x1) this.x1 = x;
        if (x > this.x2) this.x2 = x;
      }

      if (y != null) {
        if (isNaN(this.y1) || isNaN(this.y2)) {
          this.y1 = y;
          this.y2 = y;
        }

        if (y < this.y1) this.y1 = y;
        if (y > this.y2) this.y2 = y;
      }
    }
  }, {
    key: "addX",
    value: function addX(x) {
      this.addPoint(x, null);
    }
  }, {
    key: "addY",
    value: function addY(y) {
      this.addPoint(null, y);
    }
  }, {
    key: "addQuadraticCurve",
    value: function addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {
      var cp1x = p0x + 2 / 3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0)

      var cp1y = p0y + 2 / 3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0)

      var cp2x = cp1x + 1 / 3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0)

      var cp2y = cp1y + 1 / 3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0)

      this.addBezierCurve(p0x, p0y, cp1x, cp1y, cp2x, cp2y, p2x, p2y);
    }
  }, {
    key: "addBezierCurve",
    value: function addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {
      // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html
      var p0 = [p0x, p0y];
      var p1 = [p1x, p1y];
      var p2 = [p2x, p2y];
      var p3 = [p3x, p3y];
      var i;
      this.addPoint(p0[0], p0[1]);
      this.addPoint(p3[0], p3[1]);

      var f = function f(t, i) {
        return 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++) {
        var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];
        var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];
        var c = 3 * p1[i] - 3 * p0[i];

        if (a === 0) {
          if (b === 0) continue;
          var 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;
        }

        var b2ac = Math.pow(b, 2) - 4 * c * a;
        if (b2ac < 0) continue;
        var 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));
        }

        var 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));
        }
      }
    }
  }]);

  return BoundingBoxComputation;
}();

/***/ }),

/***/ "./src/canvascontext.js":
/*!******************************!*\
  !*** ./src/canvascontext.js ***!
  \******************************/
/*! exports provided: CanvasContext */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CanvasContext", function() { return CanvasContext; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }

function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }

function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }

function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Mohit Muthanna <mohit@muthanna.com>
//
// A rendering context for the Raphael backend.
//
// Copyright Mohit Cheppudira 2010

/** @constructor */

var CanvasContext =
/*#__PURE__*/
function () {
  _createClass(CanvasContext, null, [{
    key: "SanitizeCanvasDims",
    value: function SanitizeCanvasDims(width, height) {
      if (Math.max(width, height) > this.CANVAS_BROWSER_SIZE_LIMIT) {
        _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].W('Canvas dimensions exceed browser limit. Cropping to ' + this.CANVAS_BROWSER_SIZE_LIMIT);

        if (width > this.CANVAS_BROWSER_SIZE_LIMIT) {
          width = this.CANVAS_BROWSER_SIZE_LIMIT; // note: Math.min return 0 for undefined, NaN for null. Would change inputs.
        }

        if (height > this.CANVAS_BROWSER_SIZE_LIMIT) {
          height = this.CANVAS_BROWSER_SIZE_LIMIT;
        }
      }

      return [width, height];
    }
  }, {
    key: "WIDTH",
    get: function get() {
      return 600;
    }
  }, {
    key: "HEIGHT",
    get: function get() {
      return 400;
    }
  }, {
    key: "CANVAS_BROWSER_SIZE_LIMIT",
    get: function get() {
      return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size
    }
  }]);

  function CanvasContext(context) {
    _classCallCheck(this, CanvasContext);

    // Use a name that is unlikely to clash with a canvas context
    // property
    this.vexFlowCanvasContext = context;

    if (!context.canvas) {
      this.canvas = {
        width: CanvasContext.WIDTH,
        height: CanvasContext.HEIGHT
      };
    } else {
      this.canvas = context.canvas;
    }
  }

  _createClass(CanvasContext, [{
    key: "clear",
    value: function clear() {
      this.vexFlowCanvasContext.clearRect(0, 0, this.canvas.width, this.canvas.height);
    } // Containers not implemented

  }, {
    key: "openGroup",
    value: function openGroup() {}
  }, {
    key: "closeGroup",
    value: function closeGroup() {}
  }, {
    key: "add",
    value: function add() {}
  }, {
    key: "setFont",
    value: function setFont(family, size, weight) {
      this.vexFlowCanvasContext.font = (weight || '') + ' ' + size + 'pt ' + family;
      return this;
    }
  }, {
    key: "setRawFont",
    value: function setRawFont(font) {
      this.vexFlowCanvasContext.font = font;
      return this;
    }
  }, {
    key: "setFillStyle",
    value: function setFillStyle(style) {
      this.vexFlowCanvasContext.fillStyle = style;
      return this;
    }
  }, {
    key: "setBackgroundFillStyle",
    value: function setBackgroundFillStyle(style) {
      this.background_fillStyle = style;
      return this;
    }
  }, {
    key: "setStrokeStyle",
    value: function setStrokeStyle(style) {
      this.vexFlowCanvasContext.strokeStyle = style;
      return this;
    }
  }, {
    key: "setShadowColor",
    value: function setShadowColor(style) {
      this.vexFlowCanvasContext.shadowColor = style;
      return this;
    }
  }, {
    key: "setShadowBlur",
    value: function setShadowBlur(blur) {
      this.vexFlowCanvasContext.shadowBlur = blur;
      return this;
    }
  }, {
    key: "setLineWidth",
    value: function setLineWidth(width) {
      this.vexFlowCanvasContext.lineWidth = width;
      return this;
    }
  }, {
    key: "setLineCap",
    value: function setLineCap(cap_type) {
      this.vexFlowCanvasContext.lineCap = cap_type;
      return this;
    } // setLineDash: is the one native method in a canvas context
    // that begins with set, therefore we don't bolster the method
    // if it already exists (see renderer.bolsterCanvasContext).
    // If it doesn't exist, we bolster it and assume it's looking for
    // a ctx.lineDash method, as previous versions of VexFlow
    // expected.

  }, {
    key: "setLineDash",
    value: function setLineDash(dash) {
      this.vexFlowCanvasContext.lineDash = dash;
      return this;
    }
  }, {
    key: "scale",
    value: function scale(x, y) {
      return this.vexFlowCanvasContext.scale(parseFloat(x), parseFloat(y));
    }
  }, {
    key: "resize",
    value: function resize(width, height) {
      var _this$SanitizeCanvasD = this.SanitizeCanvasDims(parseInt(width, 10), parseInt(height, 10));

      var _this$SanitizeCanvasD2 = _slicedToArray(_this$SanitizeCanvasD, 2);

      width = _this$SanitizeCanvasD2[0];
      height = _this$SanitizeCanvasD2[1];
      return this.vexFlowCanvasContext.resize(width, height);
    }
  }, {
    key: "rect",
    value: function rect(x, y, width, height) {
      return this.vexFlowCanvasContext.rect(x, y, width, height);
    }
  }, {
    key: "fillRect",
    value: function fillRect(x, y, width, height) {
      return this.vexFlowCanvasContext.fillRect(x, y, width, height);
    }
  }, {
    key: "clearRect",
    value: function clearRect(x, y, width, height) {
      return this.vexFlowCanvasContext.clearRect(x, y, width, height);
    }
  }, {
    key: "beginPath",
    value: function beginPath() {
      return this.vexFlowCanvasContext.beginPath();
    }
  }, {
    key: "moveTo",
    value: function moveTo(x, y) {
      return this.vexFlowCanvasContext.moveTo(x, y);
    }
  }, {
    key: "lineTo",
    value: function lineTo(x, y) {
      return this.vexFlowCanvasContext.lineTo(x, y);
    }
  }, {
    key: "bezierCurveTo",
    value: function bezierCurveTo(x1, y1, x2, y2, x, y) {
      return this.vexFlowCanvasContext.bezierCurveTo(x1, y1, x2, y2, x, y);
    }
  }, {
    key: "quadraticCurveTo",
    value: function quadraticCurveTo(x1, y1, x, y) {
      return this.vexFlowCanvasContext.quadraticCurveTo(x1, y1, x, y);
    } // This is an attempt (hack) to simulate the HTML5 canvas
    // arc method.

  }, {
    key: "arc",
    value: function arc(x, y, radius, startAngle, endAngle, antiClockwise) {
      return this.vexFlowCanvasContext.arc(x, y, radius, startAngle, endAngle, antiClockwise);
    } // Adapted from the source for Raphael's Element.glow

  }, {
    key: "glow",
    value: function glow() {
      return this.vexFlowCanvasContext.glow();
    }
  }, {
    key: "fill",
    value: function fill() {
      return this.vexFlowCanvasContext.fill();
    }
  }, {
    key: "stroke",
    value: function stroke() {
      return this.vexFlowCanvasContext.stroke();
    }
  }, {
    key: "closePath",
    value: function closePath() {
      return this.vexFlowCanvasContext.closePath();
    }
  }, {
    key: "measureText",
    value: function measureText(text) {
      return this.vexFlowCanvasContext.measureText(text);
    }
  }, {
    key: "fillText",
    value: function fillText(text, x, y) {
      return this.vexFlowCanvasContext.fillText(text, x, y);
    }
  }, {
    key: "save",
    value: function save() {
      return this.vexFlowCanvasContext.save();
    }
  }, {
    key: "restore",
    value: function restore() {
      return this.vexFlowCanvasContext.restore();
    }
  }]);

  return CanvasContext;
}();

/***/ }),

/***/ "./src/clef.js":
/*!*********************!*\
  !*** ./src/clef.js ***!
  \*********************/
/*! exports provided: Clef */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Clef", function() { return Clef; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.
// Co-author: Benjamin W. Bohl
//
// ## Description
//
// This file implements various types of clefs that can be rendered on a stave.
//
// See `tests/clef_tests.js` for usage examples.


 // To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (Clef.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.Clef', args);
}

var Clef =
/*#__PURE__*/
function (_StaveModifier) {
  _inherits(Clef, _StaveModifier);

  _createClass(Clef, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'clefs';
    } // Every clef name is associated with a glyph code from the font file
    // and a default stave line number.

  }, {
    key: "types",
    get: function get() {
      return {
        'treble': {
          code: 'gClef',
          line: 3
        },
        'bass': {
          code: 'fClef',
          line: 1
        },
        'alto': {
          code: 'cClef',
          line: 2
        },
        'tenor': {
          code: 'cClef',
          line: 1
        },
        'percussion': {
          code: 'restMaxima',
          line: 2
        },
        'soprano': {
          code: 'cClef',
          line: 4
        },
        'mezzo-soprano': {
          code: 'cClef',
          line: 3
        },
        'baritone-c': {
          code: 'cClef',
          line: 0
        },
        'baritone-f': {
          code: 'fClef',
          line: 2
        },
        'subbass': {
          code: 'fClef',
          line: 0
        },
        'french': {
          code: 'gClef',
          line: 4
        },
        'tab': {
          code: '6stringTabClef'
        }
      };
    } // Create a new clef. The parameter `clef` must be a key from
    // `Clef.types`.

  }]);

  function Clef(type, size, annotation) {
    var _this;

    _classCallCheck(this, Clef);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Clef).call(this));

    _this.setAttribute('type', 'Clef');

    _this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__["StaveModifier"].Position.BEGIN);

    _this.setType(type, size, annotation);

    _this.setWidth(_this.musicFont.lookupMetric("clef.".concat(_this.size, ".width")));

    L('Creating clef:', type);
    return _this;
  }

  _createClass(Clef, [{
    key: "getCategory",
    value: function getCategory() {
      return Clef.CATEGORY;
    }
  }, {
    key: "setType",
    value: function setType(type, size, annotation) {
      this.type = type;
      this.clef = Clef.types[type];

      if (size === undefined) {
        this.size = 'default';
      } else {
        this.size = size;
      }

      this.clef.point = this.musicFont.lookupMetric("clef.".concat(this.size, ".point"), 0);
      this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"](this.clef.code, this.clef.point, {
        category: "clef.".concat(this.clef.code, ".").concat(this.size)
      }); // If an annotation, such as 8va, is specified, add it to the Clef object.

      if (annotation !== undefined) {
        var code = this.musicFont.lookupMetric("clef.annotations.".concat(annotation, ".smuflCode"));
        var point = this.musicFont.lookupMetric("clef.annotations.".concat(annotation, ".").concat(this.size, ".point"));
        var line = this.musicFont.lookupMetric("clef.annotations.".concat(annotation, ".").concat(this.size, ".").concat(this.type, ".line"));
        var x_shift = this.musicFont.lookupMetric("clef.annotations.".concat(annotation, ".").concat(this.size, ".").concat(this.type, ".shiftX"));
        this.annotation = {
          code: code,
          point: point,
          line: line,
          x_shift: x_shift
        };
        this.attachment = new _glyph__WEBPACK_IMPORTED_MODULE_2__["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;
    }
  }, {
    key: "getWidth",
    value: function getWidth() {
      if (this.type === 'tab' && !this.stave) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('ClefError', "Can't get width without stave.");
      }

      return this.width;
    }
  }, {
    key: "setStave",
    value: function setStave(stave) {
      this.stave = stave;
      if (this.type !== 'tab') return this;
      var numLines = this.stave.getOptions().num_lines;
      var point = this.musicFont.lookupMetric("clef.lineCount.".concat(numLines, ".point"));
      var shiftY = this.musicFont.lookupMetric("clef.lineCount.".concat(numLines, ".shiftY"));
      this.glyph.setPoint(point);
      this.glyph.setYShift(shiftY);
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      if (!this.x) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('ClefError', "Can't draw clef without x.");
      if (!this.stave) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('ClefError', "Can't draw clef without stave.");
      this.setRendered();
      this.glyph.setStave(this.stave);
      this.glyph.setContext(this.stave.context);

      if (this.clef.line !== undefined) {
        this.placeGlyphOnLine(this.glyph, this.stave, this.clef.line);
      }

      this.glyph.renderToStave(this.x);

      if (this.annotation !== undefined) {
        this.placeGlyphOnLine(this.attachment, this.stave, this.annotation.line);
        this.attachment.setStave(this.stave);
        this.attachment.setContext(this.stave.context);
        this.attachment.renderToStave(this.x);
      }
    }
  }]);

  return Clef;
}(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__["StaveModifier"]);

/***/ }),

/***/ "./src/clefnote.js":
/*!*************************!*\
  !*** ./src/clefnote.js ***!
  \*************************/
/*! exports provided: ClefNote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ClefNote", function() { return ClefNote; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.js");
/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./clef */ "./src/clef.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }

function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Copyright Mohit Muthanna 2010
//
// Author Taehoon Moon 2014




/** @constructor */

var ClefNote =
/*#__PURE__*/
function (_Note) {
  _inherits(ClefNote, _Note);

  _createClass(ClefNote, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'clefnote';
    }
  }]);

  function ClefNote(type, size, annotation) {
    var _this;

    _classCallCheck(this, ClefNote);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(ClefNote).call(this, {
      duration: 'b'
    }));

    _this.setAttribute('type', 'ClefNote');

    _this.setType(type, size, annotation); // Note properties


    _this.ignore_ticks = true;
    return _this;
  }

  _createClass(ClefNote, [{
    key: "setType",
    value: function setType(type, size, annotation) {
      this.type = type;
      this.clef_obj = new _clef__WEBPACK_IMPORTED_MODULE_2__["Clef"](type, size, annotation);
      this.clef = this.clef_obj.clef;
      this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_3__["Glyph"](this.clef.code, this.clef.point);
      this.setWidth(this.glyph.getMetrics().width);
      return this;
    }
  }, {
    key: "getClef",
    value: function getClef() {
      return this.clef;
    }
  }, {
    key: "setContext",
    value: function setContext(context) {
      this.context = context;
      this.glyph.setContext(this.context);
      return this;
    }
  }, {
    key: "getBoundingBox",
    value: function getBoundingBox() {
      return _get(_getPrototypeOf(ClefNote.prototype), "getBoundingBox", this).call(this);
    }
  }, {
    key: "addToModifierContext",
    value: function addToModifierContext() {
      /* overridden to ignore */
      return this;
    }
  }, {
    key: "getCategory",
    value: function getCategory() {
      return ClefNote.CATEGORY;
    }
  }, {
    key: "preFormat",
    value: function preFormat() {
      this.setPreFormatted(true);
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      if (!this.stave) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoStave', "Can't draw without a stave.");

      if (!this.glyph.getContext()) {
        this.glyph.setContext(this.context);
      }

      this.setRendered();
      var abs_x = this.getAbsoluteX();
      this.glyph.setStave(this.stave);
      this.glyph.setYShift(this.stave.getYForLine(this.clef.line) - this.stave.getYForGlyphs());
      this.glyph.renderToStave(abs_x); // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.

      if (this.clef_obj.annotation !== undefined) {
        var attachment = new _glyph__WEBPACK_IMPORTED_MODULE_3__["Glyph"](this.clef_obj.annotation.code, this.clef_obj.annotation.point);

        if (!attachment.getContext()) {
          attachment.setContext(this.context);
        }

        attachment.setStave(this.stave);
        attachment.setYShift(this.stave.getYForLine(this.clef_obj.annotation.line) - this.stave.getYForGlyphs());
        attachment.setXShift(this.clef_obj.annotation.x_shift);
        attachment.renderToStave(abs_x);
      }
    }
  }]);

  return ClefNote;
}(_note__WEBPACK_IMPORTED_MODULE_1__["Note"]);

/***/ }),

/***/ "./src/crescendo.js":
/*!**************************!*\
  !*** ./src/crescendo.js ***!
  \**************************/
/*! exports provided: Crescendo */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Crescendo", function() { return Crescendo; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.js");
/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
//
// 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`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (Crescendo.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.Crescendo', args);
} // Private helper to draw the hairpin


function renderHairpin(ctx, params) {
  var begin_x = params.begin_x;
  var end_x = params.end_x;
  var y = params.y;
  var 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();
}

var Crescendo =
/*#__PURE__*/
function (_Note) {
  _inherits(Crescendo, _Note);

  // Initialize the crescendo's properties
  function Crescendo(note_struct) {
    var _this;

    _classCallCheck(this, Crescendo);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Crescendo).call(this, note_struct));

    _this.setAttribute('type', 'Crescendo'); // Whether the object is a decrescendo


    _this.decrescendo = false; // The staff line to be placed on

    _this.line = note_struct.line || 0; // The height at the open end of the cresc/decresc

    _this.height = 15;
    _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(_this.render_options, {
      // Extensions to the length of the crescendo on either side
      extend_left: 0,
      extend_right: 0,
      // Vertical shift
      y_shift: 0
    });
    return _this;
  } // Set the line to center the element on


  _createClass(Crescendo, [{
    key: "setLine",
    value: function setLine(line) {
      this.line = line;
      return this;
    } // Set the full height at the open end

  }, {
    key: "setHeight",
    value: function setHeight(height) {
      this.height = height;
      return this;
    } // Set whether the sign should be a descresendo by passing a bool
    // to `decresc`

  }, {
    key: "setDecrescendo",
    value: function setDecrescendo(decresc) {
      this.decrescendo = decresc;
      return this;
    } // Preformat the note

  }, {
    key: "preFormat",
    value: function preFormat() {
      this.preFormatted = true;
      return this;
    } // Render the Crescendo object onto the canvas

  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();
      this.setRendered();
      var tick_context = this.getTickContext();
      var next_context = _tickcontext__WEBPACK_IMPORTED_MODULE_2__["TickContext"].getNextContext(tick_context);
      var begin_x = this.getAbsoluteX();
      var end_x = next_context ? next_context.getX() : this.stave.x + this.stave.width;
      var y = this.stave.getYForLine(this.line + -3) + 1;
      L('Drawing ', this.decrescendo ? 'decrescendo ' : 'crescendo ', this.height, 'x', begin_x - end_x);
      renderHairpin(this.context, {
        begin_x: begin_x - this.render_options.extend_left,
        end_x: end_x + this.render_options.extend_right,
        y: y + this.render_options.y_shift,
        height: this.height,
        reverse: this.decrescendo
      });
    }
  }]);

  return Crescendo;
}(_note__WEBPACK_IMPORTED_MODULE_1__["Note"]);

/***/ }),

/***/ "./src/curve.js":
/*!**********************!*\
  !*** ./src/curve.js ***!
  \**********************/
/*! exports provided: Curve */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Curve", function() { return Curve; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// VexFlow - Music Engraving for HTML5
// Copyright Mohit Muthanna 2010
//
// This class implements curves (for slurs)


var Curve =
/*#__PURE__*/
function (_Element) {
  _inherits(Curve, _Element);

  _createClass(Curve, null, [{
    key: "Position",
    get: function get() {
      return {
        NEAR_HEAD: 1,
        NEAR_TOP: 2
      };
    }
  }, {
    key: "PositionString",
    get: function get() {
      return {
        nearHead: Curve.Position.NEAR_HEAD,
        nearTop: Curve.Position.NEAR_TOP
      };
    } // from: Start note
    // to: End note
    // options:
    //    cps: List of control points
    //    x_shift: pixels to shift
    //    y_shift: pixels to shift

  }]);

  function Curve(from, to, options) {
    var _this;

    _classCallCheck(this, Curve);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Curve).call(this));

    _this.setAttribute('type', 'Curve');

    _this.render_options = {
      spacing: 2,
      thickness: 2,
      x_shift: 0,
      y_shift: 10,
      position: Curve.Position.NEAR_HEAD,
      position_end: Curve.Position.NEAR_HEAD,
      invert: false,
      cps: [{
        x: 0,
        y: 10
      }, {
        x: 0,
        y: 10
      }]
    };
    _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(_this.render_options, options);

    _this.setNotes(from, to);

    return _this;
  }

  _createClass(Curve, [{
    key: "setNotes",
    value: function setNotes(from, to) {
      if (!from && !to) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', 'Curve needs to have either first_note or last_note set.');
      }

      this.from = from;
      this.to = to;
      return this;
    }
    /**
     * @return {boolean} Returns true if this is a partial bar.
     */

  }, {
    key: "isPartial",
    value: function isPartial() {
      return !this.from || !this.to;
    }
  }, {
    key: "renderCurve",
    value: function renderCurve(params) {
      var ctx = this.context;
      var cps = this.render_options.cps;
      var x_shift = this.render_options.x_shift;
      var y_shift = this.render_options.y_shift * params.direction;
      var first_x = params.first_x + x_shift;
      var first_y = params.first_y + y_shift;
      var last_x = params.last_x - x_shift;
      var last_y = params.last_y + y_shift;
      var thickness = this.render_options.thickness;
      var cp_spacing = (last_x - first_x) / (cps.length + 2);
      ctx.beginPath();
      ctx.moveTo(first_x, first_y);
      ctx.bezierCurveTo(first_x + cp_spacing + cps[0].x, first_y + cps[0].y * params.direction, last_x - cp_spacing + cps[1].x, last_y + cps[1].y * params.direction, last_x, last_y);
      ctx.bezierCurveTo(last_x - cp_spacing + cps[1].x, last_y + (cps[1].y + thickness) * params.direction, first_x + cp_spacing + cps[0].x, first_y + (cps[0].y + thickness) * params.direction, first_x, first_y);
      ctx.stroke();
      ctx.closePath();
      ctx.fill();
    }
  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();
      this.setRendered();
      var first_note = this.from;
      var last_note = this.to;
      var first_x;
      var last_x;
      var first_y;
      var last_y;
      var stem_direction;
      var metric = 'baseY';
      var end_metric = 'baseY';

      function getPosition(position) {
        return typeof position === 'string' ? Curve.PositionString[position] : position;
      }

      var position = getPosition(this.render_options.position);
      var position_end = getPosition(this.render_options.position_end);

      if (position === Curve.Position.NEAR_TOP) {
        metric = 'topY';
        end_metric = 'topY';
      }

      if (position_end === Curve.Position.NEAR_HEAD) {
        end_metric = 'baseY';
      } else if (position_end === Curve.Position.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 {
        first_x = last_note.getStave().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 {
        last_x = first_note.getStave().getTieEndX();
        last_y = first_note.getStemExtents()[end_metric];
      }

      this.renderCurve({
        first_x: first_x,
        last_x: last_x,
        first_y: first_y,
        last_y: last_y,
        direction: stem_direction * (this.render_options.invert === true ? -1 : 1)
      });
      return true;
    }
  }]);

  return Curve;
}(_element__WEBPACK_IMPORTED_MODULE_1__["Element"]);

/***/ }),

/***/ "./src/dot.js":
/*!********************!*\
  !*** ./src/dot.js ***!
  \********************/
/*! exports provided: Dot */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Dot", function() { return Dot; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// VexFlow - Music Engraving for HTML5
// Copyright Mohit Muthanna 2010
//
// This class implements dot modifiers for notes.


var Dot =
/*#__PURE__*/
function (_Modifier) {
  _inherits(Dot, _Modifier);

  _createClass(Dot, null, [{
    key: "format",
    // Arrange dots inside a ModifierContext.
    value: function format(dots, state) {
      var right_shift = state.right_shift;
      var dot_spacing = 1;
      if (!dots || dots.length === 0) return false;
      var dot_list = [];
      var max_shift_map = {};

      for (var i = 0; i < dots.length; ++i) {
        var dot = dots[i];
        var note = dot.getNote();
        var props = void 0;
        var shift = void 0; // Only StaveNote has .getKeyProps()

        if (typeof note.getKeyProps === 'function') {
          props = note.getKeyProps()[dot.getIndex()];
          shift = note.getRightDisplacedHeadPx();
        } else {
          // Else it's a TabNote
          props = {
            line: 0.5
          }; // Shim key props for dot placement

          shift = 0;
        }

        var note_id = note.getAttribute('id');
        dot_list.push({
          line: props.line,
          note: note,
          note_id: note_id,
          dot: dot
        });
        max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);
      } // Sort dots by line number.


      dot_list.sort(function (a, b) {
        return b.line - a.line;
      });
      var dot_shift = right_shift;
      var x_width = 0;
      var last_line = null;
      var last_note = null;
      var prev_dotted_space = null;
      var half_shiftY = 0;

      for (var _i = 0; _i < dot_list.length; ++_i) {
        var _dot_list$_i = dot_list[_i],
            _dot = _dot_list$_i.dot,
            _note = _dot_list$_i.note,
            _note_id = _dot_list$_i.note_id,
            line = _dot_list$_i.line; // 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 - 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
     */

  }, {
    key: "CATEGORY",
    get: function get() {
      return 'dots';
    }
  }]);

  function Dot() {
    var _this;

    _classCallCheck(this, Dot);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Dot).call(this));

    _this.setAttribute('type', 'Dot');

    _this.note = null;
    _this.index = null;
    _this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"].Position.RIGHT;
    _this.radius = 2;

    _this.setWidth(5);

    _this.dot_shiftY = 0;
    return _this;
  }

  _createClass(Dot, [{
    key: "getCategory",
    value: function getCategory() {
      return Dot.CATEGORY;
    }
  }, {
    key: "setNote",
    value: function setNote(note) {
      this.note = note;

      if (this.note.getCategory() === 'gracenotes') {
        this.radius *= 0.50;
        this.setWidth(3);
      }
    }
  }, {
    key: "setDotShiftY",
    value: function setDotShiftY(y) {
      this.dot_shiftY = y;
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();
      this.setRendered();

      if (!this.note || this.index === null) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoAttachedNote', "Can't draw dot without a note and index.");
      }

      var lineSpace = this.note.stave.options.spacing_between_lines_px;
      var start = this.note.getModifierStartXY(this.position, this.index, {
        forceFlagRight: true
      }); // Set the starting y coordinate to the base of the stem for TabNotes

      if (this.note.getCategory() === 'tabnotes') {
        start.y = this.note.getStemExtents().baseY;
      }

      var x = start.x + this.x_shift + this.width - this.radius;
      var y = start.y + this.y_shift + this.dot_shiftY * lineSpace;
      var ctx = this.context;
      ctx.beginPath();
      ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);
      ctx.fill();
    }
  }]);

  return Dot;
}(_modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"]);

/***/ }),

/***/ "./src/easyscore.js":
/*!**************************!*\
  !*** ./src/easyscore.js ***!
  \**************************/
/*! exports provided: X, EasyScore */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "X", function() { return X; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EasyScore", function() { return EasyScore; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.js");
/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./parser */ "./src/parser.js");
/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./articulation */ "./src/articulation.js");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }

function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }

function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }

function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }

function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// This class implements a parser for a simple language to generate
// VexFlow objects.

/* eslint max-classes-per-file: "off" */



 // To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (EasyScore.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.EasyScore', args);
}

var X = _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].MakeException('EasyScoreError');

var Grammar =
/*#__PURE__*/
function () {
  function Grammar(builder) {
    _classCallCheck(this, Grammar);

    this.builder = builder;
  }

  _createClass(Grammar, [{
    key: "begin",
    value: function begin() {
      return this.LINE;
    }
  }, {
    key: "LINE",
    value: function LINE() {
      return {
        expect: [this.PIECE, this.PIECES, this.EOL]
      };
    }
  }, {
    key: "PIECE",
    value: function PIECE() {
      var _this = this;

      return {
        expect: [this.CHORDORNOTE, this.PARAMS],
        run: function run() {
          return _this.builder.commitPiece();
        }
      };
    }
  }, {
    key: "PIECES",
    value: function PIECES() {
      return {
        expect: [this.COMMA, this.PIECE],
        zeroOrMore: true
      };
    }
  }, {
    key: "PARAMS",
    value: function PARAMS() {
      return {
        expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS]
      };
    }
  }, {
    key: "CHORDORNOTE",
    value: function CHORDORNOTE() {
      return {
        expect: [this.CHORD, this.SINGLENOTE],
        or: true
      };
    }
  }, {
    key: "CHORD",
    value: function CHORD() {
      var _this2 = this;

      return {
        expect: [this.LPAREN, this.NOTES, this.RPAREN],
        run: function run(state) {
          return _this2.builder.addChord(state.matches[1]);
        }
      };
    }
  }, {
    key: "NOTES",
    value: function NOTES() {
      return {
        expect: [this.NOTE],
        oneOrMore: true
      };
    }
  }, {
    key: "NOTE",
    value: function NOTE() {
      return {
        expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE]
      };
    }
  }, {
    key: "SINGLENOTE",
    value: function SINGLENOTE() {
      var _this3 = this;

      return {
        expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],
        run: function run(state) {
          return _this3.builder.addSingleNote(state.matches[0], state.matches[1], state.matches[2]);
        }
      };
    }
  }, {
    key: "ACCIDENTAL",
    value: function ACCIDENTAL() {
      return {
        expect: [this.ACCIDENTALS],
        maybe: true
      };
    }
  }, {
    key: "DOTS",
    value: function DOTS() {
      var _this4 = this;

      return {
        expect: [this.DOT],
        zeroOrMore: true,
        run: function run(state) {
          return _this4.builder.setNoteDots(state.matches[0]);
        }
      };
    }
  }, {
    key: "TYPE",
    value: function TYPE() {
      var _this5 = this;

      return {
        expect: [this.SLASH, this.MAYBESLASH, this.TYPES],
        maybe: true,
        run: function run(state) {
          return _this5.builder.setNoteType(state.matches[2]);
        }
      };
    }
  }, {
    key: "DURATION",
    value: function DURATION() {
      var _this6 = this;

      return {
        expect: [this.SLASH, this.DURATIONS],
        maybe: true,
        run: function run(state) {
          return _this6.builder.setNoteDuration(state.matches[1]);
        }
      };
    }
  }, {
    key: "OPTS",
    value: function OPTS() {
      return {
        expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],
        maybe: true
      };
    }
  }, {
    key: "KEYVALS",
    value: function KEYVALS() {
      return {
        expect: [this.COMMA, this.KEYVAL],
        zeroOrMore: true
      };
    }
  }, {
    key: "KEYVAL",
    value: function KEYVAL() {
      var _this7 = this;

      var unquote = function unquote(str) {
        return str.slice(1, -1);
      };

      return {
        expect: [this.KEY, this.EQUALS, this.VAL],
        run: function run(state) {
          return _this7.builder.addNoteOption(state.matches[0], unquote(state.matches[2]));
        }
      };
    }
  }, {
    key: "VAL",
    value: function VAL() {
      return {
        expect: [this.SVAL, this.DVAL],
        or: true
      };
    }
  }, {
    key: "KEY",
    value: function KEY() {
      return {
        token: '[a-zA-Z][a-zA-Z0-9]*'
      };
    }
  }, {
    key: "DVAL",
    value: function DVAL() {
      return {
        token: '["][^"]*["]'
      };
    }
  }, {
    key: "SVAL",
    value: function SVAL() {
      return {
        token: "['][^']*[']"
      };
    }
  }, {
    key: "NOTENAME",
    value: function NOTENAME() {
      return {
        token: '[a-gA-G]'
      };
    }
  }, {
    key: "OCTAVE",
    value: function OCTAVE() {
      return {
        token: '[0-9]+'
      };
    }
  }, {
    key: "ACCIDENTALS",
    value: function ACCIDENTALS() {
      return {
        token: 'bbs|bb|bss|bs|b|db|d|##|#|n|\\+\\+-|\\+-|\\+\\+|\\+|k|o'
      };
    }
  }, {
    key: "DURATIONS",
    value: function DURATIONS() {
      return {
        token: '[0-9whq]+'
      };
    }
  }, {
    key: "TYPES",
    value: function TYPES() {
      return {
        token: '[rRsSxX]'
      };
    }
  }, {
    key: "LPAREN",
    value: function LPAREN() {
      return {
        token: '[(]'
      };
    }
  }, {
    key: "RPAREN",
    value: function RPAREN() {
      return {
        token: '[)]'
      };
    }
  }, {
    key: "COMMA",
    value: function COMMA() {
      return {
        token: '[,]'
      };
    }
  }, {
    key: "DOT",
    value: function DOT() {
      return {
        token: '[.]'
      };
    }
  }, {
    key: "SLASH",
    value: function SLASH() {
      return {
        token: '[/]'
      };
    }
  }, {
    key: "MAYBESLASH",
    value: function MAYBESLASH() {
      return {
        token: '[/]?'
      };
    }
  }, {
    key: "EQUALS",
    value: function EQUALS() {
      return {
        token: '[=]'
      };
    }
  }, {
    key: "LBRACKET",
    value: function LBRACKET() {
      return {
        token: '\\['
      };
    }
  }, {
    key: "RBRACKET",
    value: function RBRACKET() {
      return {
        token: '\\]'
      };
    }
  }, {
    key: "EOL",
    value: function EOL() {
      return {
        token: '$'
      };
    }
  }]);

  return Grammar;
}();

var Builder =
/*#__PURE__*/
function () {
  function Builder(factory) {
    _classCallCheck(this, Builder);

    this.factory = factory;
    this.commitHooks = [];
    this.reset();
  }

  _createClass(Builder, [{
    key: "reset",
    value: function reset() {
      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      this.options = {
        stem: 'auto',
        clef: 'treble'
      };
      this.elements = {
        notes: [],
        accidentals: []
      };
      this.rollingDuration = '8';
      this.resetPiece();

      _extends(this.options, options);
    }
  }, {
    key: "getFactory",
    value: function getFactory() {
      return this.factory;
    }
  }, {
    key: "getElements",
    value: function getElements() {
      return this.elements;
    }
  }, {
    key: "addCommitHook",
    value: function addCommitHook(commitHook) {
      this.commitHooks.push(commitHook);
    }
  }, {
    key: "resetPiece",
    value: function resetPiece() {
      L('resetPiece');
      this.piece = {
        chord: [],
        duration: this.rollingDuration,
        dots: 0,
        type: undefined,
        options: {}
      };
    }
  }, {
    key: "setNoteDots",
    value: function setNoteDots(dots) {
      L('setNoteDots:', dots);
      if (dots) this.piece.dots = dots.length;
    }
  }, {
    key: "setNoteDuration",
    value: function setNoteDuration(duration) {
      L('setNoteDuration:', duration);
      this.rollingDuration = this.piece.duration = duration || this.rollingDuration;
    }
  }, {
    key: "setNoteType",
    value: function setNoteType(type) {
      L('setNoteType:', type);
      if (type) this.piece.type = type;
    }
  }, {
    key: "addNoteOption",
    value: function addNoteOption(key, value) {
      L('addNoteOption: key:', key, 'value:', value);
      this.piece.options[key] = value;
    }
  }, {
    key: "addNote",
    value: function addNote(key, accid, octave) {
      L('addNote:', key, accid, octave);
      this.piece.chord.push({
        key: key,
        accid: accid,
        octave: octave
      });
    }
  }, {
    key: "addSingleNote",
    value: function addSingleNote(key, accid, octave) {
      L('addSingleNote:', key, accid, octave);
      this.addNote(key, accid, octave);
    }
  }, {
    key: "addChord",
    value: function addChord(notes) {
      var _this8 = this;

      L('startChord');

      if (_typeof(notes[0]) !== 'object') {
        this.addSingleNote(notes[0]);
      } else {
        notes.forEach(function (n) {
          if (n) _this8.addNote.apply(_this8, _toConsumableArray(n));
        });
      }

      L('endChord');
    }
  }, {
    key: "commitPiece",
    value: function commitPiece() {
      var _this9 = this;

      L('commitPiece');
      var factory = this.factory;
      if (!factory) return;

      var options = _objectSpread({}, this.options, {}, this.piece.options);

      var stem = options.stem,
          clef = options.clef;
      var autoStem = stem.toLowerCase() === 'auto';
      var stemDirection = !autoStem && stem.toLowerCase() === 'up' ? _stavenote__WEBPACK_IMPORTED_MODULE_1__["StaveNote"].STEM_UP : _stavenote__WEBPACK_IMPORTED_MODULE_1__["StaveNote"].STEM_DOWN; // Build StaveNotes.

      var _this$piece = this.piece,
          chord = _this$piece.chord,
          duration = _this$piece.duration,
          dots = _this$piece.dots,
          type = _this$piece.type;
      var keys = chord.map(function (note) {
        return note.key + '/' + note.octave;
      });
      var note = factory.StaveNote({
        keys: keys,
        duration: duration,
        dots: dots,
        type: type,
        clef: clef,
        auto_stem: autoStem
      });
      if (!autoStem) note.setStemDirection(stemDirection); // Attach accidentals.

      var accids = chord.map(function (note) {
        return note.accid || null;
      });
      accids.forEach(function (accid, i) {
        if (accid) note.addAccidental(i, factory.Accidental({
          type: accid
        }));
      }); // Attach dots.

      for (var i = 0; i < dots; i++) {
        note.addDotToAll();
      }

      this.commitHooks.forEach(function (fn) {
        return fn(options, note, _this9);
      });
      this.elements.notes.push(note);
      this.elements.accidentals.concat(accids);
      this.resetPiece();
    }
  }]);

  return Builder;
}();

function setId(_ref, note) {
  var id = _ref.id;
  if (id === undefined) return;
  note.setAttribute('id', id);
}

function setClass(options, note) {
  if (!options["class"]) return;
  var commaSeparatedRegex = /\s*,\s*/;
  options["class"].split(commaSeparatedRegex).forEach(function (className) {
    return note.addClass(className);
  });
}

var EasyScore =
/*#__PURE__*/
function () {
  function EasyScore() {
    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _classCallCheck(this, EasyScore);

    this.setOptions(options);
    this.defaults = {
      clef: 'treble',
      time: '4/4',
      stem: 'auto'
    };
  }

  _createClass(EasyScore, [{
    key: "set",
    value: function set(defaults) {
      _extends(this.defaults, defaults);

      return this;
    }
  }, {
    key: "setOptions",
    value: function setOptions(options) {
      var _this10 = this;

      this.options = _objectSpread({
        factory: null,
        builder: null,
        commitHooks: [setId, setClass, _articulation__WEBPACK_IMPORTED_MODULE_3__["Articulation"].easyScoreHook],
        throwOnError: false
      }, options);
      this.factory = this.options.factory;
      this.builder = this.options.builder || new Builder(this.factory);
      this.grammar = new Grammar(this.builder);
      this.parser = new _parser__WEBPACK_IMPORTED_MODULE_2__["Parser"](this.grammar);
      this.options.commitHooks.forEach(function (commitHook) {
        return _this10.addCommitHook(commitHook);
      });
      return this;
    }
  }, {
    key: "setContext",
    value: function setContext(context) {
      if (this.factory) this.factory.setContext(context);
      return this;
    }
  }, {
    key: "parse",
    value: function parse(line) {
      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
      this.builder.reset(options);
      var result = this.parser.parse(line);

      if (!result.success && this.options.throwOnError) {
        throw new X('Error parsing line: ' + line, result);
      }

      return result;
    }
  }, {
    key: "beam",
    value: function beam(notes) {
      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
      this.factory.Beam({
        notes: notes,
        options: options
      });
      return notes;
    }
  }, {
    key: "tuplet",
    value: function tuplet(notes) {
      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
      this.factory.Tuplet({
        notes: notes,
        options: options
      });
      return notes;
    }
  }, {
    key: "notes",
    value: function notes(line) {
      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
      options = _objectSpread({
        clef: this.defaults.clef,
        stem: this.defaults.stem
      }, options);
      this.parse(line, options);
      return this.builder.getElements().notes;
    }
  }, {
    key: "voice",
    value: function voice(notes, voiceOptions) {
      voiceOptions = _objectSpread({
        time: this.defaults.time
      }, voiceOptions);
      return this.factory.Voice(voiceOptions).addTickables(notes);
    }
  }, {
    key: "addCommitHook",
    value: function addCommitHook(commitHook) {
      return this.builder.addCommitHook(commitHook);
    }
  }]);

  return EasyScore;
}();

/***/ }),

/***/ "./src/element.js":
/*!************************!*\
  !*** ./src/element.js ***!
  \************************/
/*! exports provided: Element */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Element", function() { return Element; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./registry */ "./src/registry.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// @author Mohit Cheppudira
//
// ## Description
//
// This file implements a generic base class for VexFlow, with implementations
// of general functions and properties that can be inherited by all VexFlow elements.



var Element =
/*#__PURE__*/
function () {
  _createClass(Element, null, [{
    key: "newID",
    value: function newID() {
      return 'auto' + Element.ID++;
    }
  }]);

  function Element() {
    var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
        type = _ref.type;

    _classCallCheck(this, Element);

    this.attrs = {
      id: Element.newID(),
      el: null,
      type: type || 'Base',
      classes: {}
    };
    this.boundingBox = null;
    this.context = null;
    this.rendered = false;
    this.fontStack = _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].DEFAULT_FONT_STACK;
    this.musicFont = _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].DEFAULT_FONT_STACK[0]; // If a default registry exist, then register with it right away.

    if (_registry__WEBPACK_IMPORTED_MODULE_1__["Registry"].getDefaultRegistry()) {
      _registry__WEBPACK_IMPORTED_MODULE_1__["Registry"].getDefaultRegistry().register(this);
    }
  } // set music font


  _createClass(Element, [{
    key: "setFontStack",
    value: function setFontStack(fontStack) {
      this.fontStack = fontStack;
      this.musicFont = fontStack[0];
      return this;
    }
  }, {
    key: "getFontStack",
    value: function getFontStack() {
      return this.fontStack;
    } // set the draw style of a stemmable note:

  }, {
    key: "setStyle",
    value: function setStyle(style) {
      this.style = style;
      return this;
    }
  }, {
    key: "getStyle",
    value: function getStyle() {
      return this.style;
    } // Apply current style to Canvas `context`

  }, {
    key: "applyStyle",
    value: function applyStyle() {
      var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.context;
      var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getStyle();
      if (!style) 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;
    }
  }, {
    key: "restoreStyle",
    value: function restoreStyle() {
      var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.context;
      var style = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getStyle();
      if (!style) return this;
      context.restore();
      return this;
    } // draw with style of an element.

  }, {
    key: "drawWithStyle",
    value: function drawWithStyle() {
      this.checkContext();
      this.applyStyle();
      this.draw();
      this.restoreStyle();
    } // An element can have multiple class labels.

  }, {
    key: "hasClass",
    value: function hasClass(className) {
      return this.attrs.classes[className] === true;
    }
  }, {
    key: "addClass",
    value: function addClass(className) {
      this.attrs.classes[className] = true;

      if (this.registry) {
        this.registry.onUpdate({
          id: this.getAttribute('id'),
          name: 'class',
          value: className,
          oldValue: null
        });
      }

      return this;
    }
  }, {
    key: "removeClass",
    value: function removeClass(className) {
      delete this.attrs.classes[className];

      if (this.registry) {
        this.registry.onUpdate({
          id: this.getAttribute('id'),
          name: 'class',
          value: null,
          oldValue: className
        });
      }

      return this;
    } // This is called by the registry after the element is registered.

  }, {
    key: "onRegister",
    value: function onRegister(registry) {
      this.registry = registry;
      return this;
    }
  }, {
    key: "isRendered",
    value: function isRendered() {
      return this.rendered;
    }
  }, {
    key: "setRendered",
    value: function setRendered() {
      var rendered = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
      this.rendered = rendered;
      return this;
    }
  }, {
    key: "getAttributes",
    value: function getAttributes() {
      return this.attrs;
    }
  }, {
    key: "getAttribute",
    value: function getAttribute(name) {
      return this.attrs[name];
    }
  }, {
    key: "setAttribute",
    value: function setAttribute(name, value) {
      var id = this.attrs.id;
      var oldValue = this.attrs[name];
      this.attrs[name] = value;

      if (this.registry) {
        // Register with old id to support id changes.
        this.registry.onUpdate({
          id: id,
          name: name,
          value: value,
          oldValue: oldValue
        });
      }

      return this;
    }
  }, {
    key: "getContext",
    value: function getContext() {
      return this.context;
    }
  }, {
    key: "setContext",
    value: function setContext(context) {
      this.context = context;
      return this;
    }
  }, {
    key: "getBoundingBox",
    value: function getBoundingBox() {
      return this.boundingBox;
    } // Validators

  }, {
    key: "checkContext",
    value: function checkContext() {
      if (!this.context) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoContext', 'No rendering context attached to instance');
      }

      return this.context;
    }
  }]);

  return Element;
}();
Element.ID = 1000;

/***/ }),

/***/ "./src/factory.js":
/*!************************!*\
  !*** ./src/factory.js ***!
  \************************/
/*! exports provided: X, Factory */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "X", function() { return X; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Factory", function() { return Factory; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./accidental */ "./src/accidental.js");
/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./articulation */ "./src/articulation.js");
/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./annotation */ "./src/annotation.js");
/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./formatter */ "./src/formatter.js");
/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.js");
/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.js");
/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.js");
/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.js");
/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.js");
/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./renderer */ "./src/renderer.js");
/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stave */ "./src/stave.js");
/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.js");
/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./staveline */ "./src/staveline.js");
/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.js");
/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.js");
/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.js");
/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.js");
/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./system */ "./src/system.js");
/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.js");
/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.js");
/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./voice */ "./src/voice.js");
/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./beam */ "./src/beam.js");
/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./curve */ "./src/curve.js");
/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.js");
/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.js");
/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.js");
/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.js");
/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.js");
/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.js");
/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.js");
/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.js");
/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.js");
/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.js");
/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.js");
/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./barnote */ "./src/barnote.js");
/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.js");
/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.js");
/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./textnote */ "./src/textnote.js");
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// @author Mohit Cheppudira
//
// ## Description
//
// This file implements a high level API around VexFlow. It will eventually
// become the canonical way to use VexFlow.
//
// *This API is currently DRAFT*






































 // To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (Factory.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.Factory', args);
}

var X = _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].MakeException('FactoryError');

function setDefaults() {
  var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  var defaults = arguments.length > 1 ? arguments[1] : undefined;
  var default_options = defaults.options;
  params = _extends(defaults, params);
  params.options = _extends(default_options, params.options);
  return params;
}

var Factory =
/*#__PURE__*/
function () {
  function Factory(options) {
    _classCallCheck(this, Factory);

    L('New factory: ', options);
    var defaults = {
      stave: {
        space: 10
      },
      renderer: {
        context: null,
        elementId: '',
        backend: _renderer__WEBPACK_IMPORTED_MODULE_10__["Renderer"].Backends.SVG,
        width: 500,
        height: 200,
        background: '#FFF'
      },
      font: {
        face: 'Arial',
        point: 10,
        style: ''
      }
    };
    this.options = defaults;
    this.setOptions(options);
  }

  _createClass(Factory, [{
    key: "reset",
    value: function reset() {
      this.renderQ = [];
      this.systems = [];
      this.staves = [];
      this.voices = [];
      this.stave = null; // current stave
    }
  }, {
    key: "getOptions",
    value: function getOptions() {
      return this.options;
    }
  }, {
    key: "setOptions",
    value: function setOptions(options) {
      for (var _i = 0, _arr = ['stave', 'renderer', 'font']; _i < _arr.length; _i++) {
        var key = _arr[_i];

        _extends(this.options[key], options[key]);
      }

      if (this.options.renderer.elementId !== null || this.options.renderer.context) {
        this.initRenderer();
      }

      this.reset();
    }
  }, {
    key: "initRenderer",
    value: function initRenderer() {
      var _this$options$rendere = this.options.renderer,
          elementId = _this$options$rendere.elementId,
          backend = _this$options$rendere.backend,
          width = _this$options$rendere.width,
          height = _this$options$rendere.height,
          background = _this$options$rendere.background;

      if (elementId === '') {
        throw new X('HTML DOM element not set in Factory');
      }

      this.context = _renderer__WEBPACK_IMPORTED_MODULE_10__["Renderer"].buildContext(elementId, backend, width, height, background);
    }
  }, {
    key: "getContext",
    value: function getContext() {
      return this.context;
    }
  }, {
    key: "setContext",
    value: function setContext(context) {
      this.context = context;
      return this;
    }
  }, {
    key: "getStave",
    value: function getStave() {
      return this.stave;
    }
  }, {
    key: "getVoices",
    value: function getVoices() {
      return this.voices;
    } // Returns pixels from current stave spacing.

  }, {
    key: "space",
    value: function space(spacing) {
      return this.options.stave.space * spacing;
    }
  }, {
    key: "Stave",
    value: function Stave(params) {
      params = setDefaults(params, {
        x: 0,
        y: 0,
        width: this.options.renderer.width - this.space(1),
        options: {
          spacing_between_lines_px: this.options.stave.space
        }
      });
      var stave = new _stave__WEBPACK_IMPORTED_MODULE_11__["Stave"](params.x, params.y, params.width, params.options);
      this.staves.push(stave);
      stave.setContext(this.context);
      this.stave = stave;
      return stave;
    }
  }, {
    key: "TabStave",
    value: function TabStave(params) {
      params = setDefaults(params, {
        x: 0,
        y: 0,
        width: this.options.renderer.width - this.space(1),
        options: {
          spacing_between_lines_px: this.options.stave.space * 1.3
        }
      });
      var stave = new _tabstave__WEBPACK_IMPORTED_MODULE_37__["TabStave"](params.x, params.y, params.width, params.options);
      this.staves.push(stave);
      stave.setContext(this.context);
      this.stave = stave;
      return stave;
    }
  }, {
    key: "StaveNote",
    value: function StaveNote(noteStruct) {
      var note = new _stavenote__WEBPACK_IMPORTED_MODULE_14__["StaveNote"](noteStruct);
      if (this.stave) note.setStave(this.stave);
      note.setContext(this.context);
      this.renderQ.push(note);
      return note;
    }
  }, {
    key: "GlyphNote",
    value: function GlyphNote(glyph, noteStruct, options) {
      var note = new _glyphnote__WEBPACK_IMPORTED_MODULE_15__["GlyphNote"](glyph, noteStruct, options);
      if (this.stave) note.setStave(this.stave);
      note.setContext(this.context);
      this.renderQ.push(note);
      return note;
    }
  }, {
    key: "RepeatNote",
    value: function RepeatNote(type, noteStruct, options) {
      var note = new _repeatnote__WEBPACK_IMPORTED_MODULE_16__["RepeatNote"](type, noteStruct, options);
      if (this.stave) note.setStave(this.stave);
      note.setContext(this.context);
      this.renderQ.push(note);
      return note;
    }
  }, {
    key: "GhostNote",
    value: function GhostNote(noteStruct) {
      var ghostNote = new _ghostnote__WEBPACK_IMPORTED_MODULE_34__["GhostNote"](noteStruct);
      if (this.stave) ghostNote.setStave(this.stave);
      ghostNote.setContext(this.context);
      this.renderQ.push(ghostNote);
      return ghostNote;
    }
  }, {
    key: "TextNote",
    value: function TextNote(textNoteStruct) {
      var textNote = new _textnote__WEBPACK_IMPORTED_MODULE_38__["TextNote"](textNoteStruct);
      if (this.stave) textNote.setStave(this.stave);
      textNote.setContext(this.context);
      this.renderQ.push(textNote);
      return textNote;
    }
  }, {
    key: "BarNote",
    value: function BarNote(params) {
      params = setDefaults(params, {
        type: 'single',
        options: {}
      });
      var barNote = new _barnote__WEBPACK_IMPORTED_MODULE_35__["BarNote"](params.type);
      if (this.stave) barNote.setStave(this.stave);
      barNote.setContext(this.context);
      this.renderQ.push(barNote);
      return barNote;
    }
  }, {
    key: "ClefNote",
    value: function ClefNote(params) {
      params = setDefaults(params, {
        type: 'treble',
        options: {
          size: 'default'
        }
      });
      var clefNote = new _clefnote__WEBPACK_IMPORTED_MODULE_30__["ClefNote"](params.type, params.options.size, params.options.annotation);
      if (this.stave) clefNote.setStave(this.stave);
      clefNote.setContext(this.context);
      this.renderQ.push(clefNote);
      return clefNote;
    }
  }, {
    key: "TimeSigNote",
    value: function TimeSigNote(params) {
      params = setDefaults(params, {
        time: '4/4',
        options: {}
      });
      var timeSigNote = new _timesignote__WEBPACK_IMPORTED_MODULE_28__["TimeSigNote"](params.time);
      if (this.stave) timeSigNote.setStave(this.stave);
      timeSigNote.setContext(this.context);
      this.renderQ.push(timeSigNote);
      return timeSigNote;
    }
  }, {
    key: "KeySigNote",
    value: function KeySigNote(params) {
      var keySigNote = new _keysignote__WEBPACK_IMPORTED_MODULE_29__["KeySigNote"](params.key, params.cancelKey, params.alterKey);
      if (this.stave) keySigNote.setStave(this.stave);
      keySigNote.setContext(this.context);
      this.renderQ.push(keySigNote);
      return keySigNote;
    }
  }, {
    key: "TabNote",
    value: function TabNote(noteStruct) {
      var note = new _tabnote__WEBPACK_IMPORTED_MODULE_36__["TabNote"](noteStruct);
      if (this.stave) note.setStave(this.stave);
      note.setContext(this.context);
      this.renderQ.push(note);
      return note;
    }
  }, {
    key: "GraceNote",
    value: function GraceNote(noteStruct) {
      var note = new _gracenote__WEBPACK_IMPORTED_MODULE_24__["GraceNote"](noteStruct);
      if (this.stave) note.setStave(this.stave);
      note.setContext(this.context);
      return note;
    }
  }, {
    key: "GraceNoteGroup",
    value: function GraceNoteGroup(params) {
      var group = new _gracenotegroup__WEBPACK_IMPORTED_MODULE_25__["GraceNoteGroup"](params.notes, params.slur);
      group.setContext(this.context);
      return group;
    }
  }, {
    key: "Accidental",
    value: function Accidental(params) {
      params = setDefaults(params, {
        type: null,
        options: {}
      });
      var accid = new _accidental__WEBPACK_IMPORTED_MODULE_1__["Accidental"](params.type);
      accid.setContext(this.context);
      return accid;
    }
  }, {
    key: "Annotation",
    value: function Annotation(params) {
      params = setDefaults(params, {
        text: 'p',
        vJustify: 'below',
        hJustify: 'center',
        fontFamily: 'Times',
        fontSize: 14,
        fontWeight: 'bold italic',
        options: {}
      });
      var annotation = new _annotation__WEBPACK_IMPORTED_MODULE_3__["Annotation"](params.text);
      annotation.setJustification(params.hJustify);
      annotation.setVerticalJustification(params.vJustify);
      annotation.setFont(params.fontFamily, params.fontSize, params.fontWeight);
      annotation.setContext(this.context);
      return annotation;
    }
  }, {
    key: "Articulation",
    value: function Articulation(params) {
      params = setDefaults(params, {
        type: 'a.',
        position: 'above',
        options: {}
      });
      var articulation = new _articulation__WEBPACK_IMPORTED_MODULE_2__["Articulation"](params.type);
      articulation.setPosition(params.position);
      articulation.setContext(this.context);
      return articulation;
    }
  }, {
    key: "TextDynamics",
    value: function TextDynamics(params) {
      params = setDefaults(params, {
        text: 'p',
        duration: 'q',
        dots: 0,
        line: 0,
        options: {}
      });
      var text = new _textdynamics__WEBPACK_IMPORTED_MODULE_7__["TextDynamics"]({
        text: params.text,
        line: params.line,
        duration: params.duration,
        dots: params.dots
      });
      if (this.stave) text.setStave(this.stave);
      text.setContext(this.context);
      this.renderQ.push(text);
      return text;
    }
  }, {
    key: "Fingering",
    value: function Fingering(params) {
      params = setDefaults(params, {
        number: '0',
        position: 'left',
        options: {}
      });
      var fingering = new _frethandfinger__WEBPACK_IMPORTED_MODULE_5__["FretHandFinger"](params.number);
      fingering.setPosition(params.position);
      fingering.setContext(this.context);
      return fingering;
    }
  }, {
    key: "StringNumber",
    value: function StringNumber(params) {
      params = setDefaults(params, {
        number: '0',
        position: 'left',
        options: {}
      });
      var stringNumber = new _stringnumber__WEBPACK_IMPORTED_MODULE_6__["StringNumber"](params.number);
      stringNumber.setPosition(params.position);
      stringNumber.setContext(this.context);
      return stringNumber;
    }
  }, {
    key: "TickContext",
    value: function TickContext() {
      return new _tickcontext__WEBPACK_IMPORTED_MODULE_19__["TickContext"]().setContext(this.context);
    }
  }, {
    key: "ModifierContext",
    value: function ModifierContext() {
      return new _modifiercontext__WEBPACK_IMPORTED_MODULE_8__["ModifierContext"]();
    }
  }, {
    key: "MultiMeasureRest",
    value: function MultiMeasureRest(params) {
      var multimeasurerest = new _multimeasurerest__WEBPACK_IMPORTED_MODULE_9__["MultiMeasureRest"](params.number_of_measures, params);
      multimeasurerest.setContext(this.context);
      this.renderQ.push(multimeasurerest);
      return multimeasurerest;
    }
  }, {
    key: "Voice",
    value: function Voice(params) {
      params = setDefaults(params, {
        time: '4/4',
        options: {}
      });
      var voice = new _voice__WEBPACK_IMPORTED_MODULE_21__["Voice"](params.time, params.options);
      this.voices.push(voice);
      return voice;
    }
  }, {
    key: "StaveConnector",
    value: function StaveConnector(params) {
      params = setDefaults(params, {
        top_stave: null,
        bottom_stave: null,
        type: 'double',
        options: {}
      });
      var connector = new _staveconnector__WEBPACK_IMPORTED_MODULE_17__["StaveConnector"](params.top_stave, params.bottom_stave);
      connector.setType(params.type).setContext(this.context);
      this.renderQ.push(connector);
      return connector;
    }
  }, {
    key: "Formatter",
    value: function Formatter() {
      return new _formatter__WEBPACK_IMPORTED_MODULE_4__["Formatter"]();
    }
  }, {
    key: "Tuplet",
    value: function Tuplet(params) {
      params = setDefaults(params, {
        notes: [],
        options: {}
      });
      var tuplet = new _tuplet__WEBPACK_IMPORTED_MODULE_20__["Tuplet"](params.notes, params.options).setContext(this.context);
      this.renderQ.push(tuplet);
      return tuplet;
    }
  }, {
    key: "Beam",
    value: function Beam(params) {
      params = setDefaults(params, {
        notes: [],
        options: {
          autoStem: false,
          secondaryBeamBreaks: []
        }
      });
      var beam = new _beam__WEBPACK_IMPORTED_MODULE_22__["Beam"](params.notes, params.options.autoStem).setContext(this.context);
      beam.breakSecondaryAt(params.options.secondaryBeamBreaks);
      this.renderQ.push(beam);
      return beam;
    }
  }, {
    key: "Curve",
    value: function Curve(params) {
      params = setDefaults(params, {
        from: null,
        to: null,
        options: {}
      });
      var curve = new _curve__WEBPACK_IMPORTED_MODULE_23__["Curve"](params.from, params.to, params.options).setContext(this.context);
      this.renderQ.push(curve);
      return curve;
    }
  }, {
    key: "StaveTie",
    value: function StaveTie(params) {
      params = setDefaults(params, {
        from: null,
        to: null,
        first_indices: [0],
        last_indices: [0],
        text: null,
        options: {
          direction: undefined
        }
      });
      var tie = new _stavetie__WEBPACK_IMPORTED_MODULE_12__["StaveTie"]({
        first_note: params.from,
        last_note: params.to,
        first_indices: params.first_indices,
        last_indices: params.last_indices
      }, params.text);
      if (params.options.direction) tie.setDirection(params.options.direction);
      tie.setContext(this.context);
      this.renderQ.push(tie);
      return tie;
    }
  }, {
    key: "StaveLine",
    value: function StaveLine(params) {
      params = setDefaults(params, {
        from: null,
        to: null,
        first_indices: [0],
        last_indices: [0],
        options: {}
      });
      var line = new _staveline__WEBPACK_IMPORTED_MODULE_13__["StaveLine"]({
        first_note: params.from,
        last_note: params.to,
        first_indices: params.first_indices,
        last_indices: params.last_indices
      });
      if (params.options.text) line.setText(params.options.text);
      if (params.options.font) line.setFont(params.options.font);
      line.setContext(this.context);
      this.renderQ.push(line);
      return line;
    }
  }, {
    key: "VibratoBracket",
    value: function VibratoBracket(params) {
      params = setDefaults(params, {
        from: null,
        to: null,
        options: {
          harsh: false
        }
      });
      var vibratoBracket = new _vibratobracket__WEBPACK_IMPORTED_MODULE_33__["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;
    }
  }, {
    key: "TextBracket",
    value: function TextBracket(params) {
      params = setDefaults(params, {
        from: null,
        to: null,
        text: '',
        options: {
          superscript: '',
          position: 1
        }
      });
      var textBracket = new _textbracket__WEBPACK_IMPORTED_MODULE_32__["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;
    }
  }, {
    key: "System",
    value: function System() {
      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      params.factory = this;
      var system = new _system__WEBPACK_IMPORTED_MODULE_18__["System"](params).setContext(this.context);
      this.systems.push(system);
      return system;
    }
  }, {
    key: "EasyScore",
    value: function EasyScore() {
      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      params.factory = this;
      return new _easyscore__WEBPACK_IMPORTED_MODULE_27__["EasyScore"](params);
    }
  }, {
    key: "PedalMarking",
    value: function PedalMarking() {
      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      params = setDefaults(params, {
        notes: [],
        options: {
          style: 'mixed'
        }
      });
      var pedal = new _pedalmarking__WEBPACK_IMPORTED_MODULE_31__["PedalMarking"](params.notes);
      pedal.setStyle(_pedalmarking__WEBPACK_IMPORTED_MODULE_31__["PedalMarking"].StylesString[params.options.style]);
      pedal.setContext(this.context);
      this.renderQ.push(pedal);
      return pedal;
    }
  }, {
    key: "NoteSubGroup",
    value: function NoteSubGroup() {
      var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      params = setDefaults(params, {
        notes: [],
        options: {}
      });
      var group = new _notesubgroup__WEBPACK_IMPORTED_MODULE_26__["NoteSubGroup"](params.notes);
      group.setContext(this.context);
      return group;
    }
  }, {
    key: "draw",
    value: function draw() {
      var _this = this;

      this.systems.forEach(function (i) {
        return i.setContext(_this.context).format();
      });
      this.staves.forEach(function (i) {
        return i.setContext(_this.context).draw();
      });
      this.voices.forEach(function (i) {
        return i.setContext(_this.context).draw();
      });
      this.renderQ.forEach(function (i) {
        if (!i.isRendered()) i.setContext(_this.context).draw();
      });
      this.systems.forEach(function (i) {
        return i.setContext(_this.context).draw();
      });
      this.reset();
    }
  }], [{
    key: "newFromElementId",
    value: function newFromElementId(elementId) {
      var width = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 500;
      var height = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 200;
      return new Factory({
        renderer: {
          elementId: elementId,
          width: width,
          height: height
        }
      });
    }
  }]);

  return Factory;
}();

/***/ }),

/***/ "./src/fonts/bravura_glyphs.js":
/*!*************************************!*\
  !*** ./src/fonts/bravura_glyphs.js ***!
  \*************************************/
/*! exports provided: BravuraFont */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BravuraFont", function() { return BravuraFont; });
var BravuraFont = {
  'glyphs': {
    'bracketTop': {
      'x_min': 0,
      'x_max': 469,
      'y_min': 0,
      'y_max': 295,
      'ha': 295,
      'o': 'm 0 168 l 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 0 l 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 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 0 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 b 0 374 6 372 3 374 z'
    },
    'segno': {
      'x_min': 4,
      'x_max': 550,
      'y_min': -27,
      'y_max': 759,
      'ha': 786,
      'o': 'm 29 687 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 624 75 704 120 670 82 b 613 73 621 75 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 l 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 z m 680 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 b 680 589 598 626 635 589 z m 120 298 b 202 380 166 298 202 334 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 z'
    },
    'coda': {
      'x_min': -4,
      'x_max': 955,
      'y_min': -158,
      'y_max': 898,
      'ha': 1056,
      'o': 'm -6 541 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 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 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 729 507 l 940 507 b 729 69 936 287 909 91 z m 455 576 b 660 1002 455 809 455 985 l 660 576 z m 660 507 l 660 69 b 455 507 474 91 456 285 z'
    },
    'gClef': {
      'x_min': 0,
      'x_max': 671,
      'y_min': -658,
      'y_max': 1098,
      'ha': 1756,
      'o': 'm 524 -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 l 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 z m 115 29 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 l 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 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 635 168 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 l 619 148 b 635 168 616 166 618 170 z'
    },
    'cClef': {
      'x_min': 0,
      'x_max': 699,
      'y_min': -506,
      'y_max': 506,
      'ha': 1012,
      'o': 'm 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 l 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 z m 30 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 l 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 z'
    },
    'fClef': {
      'x_min': -5,
      'x_max': 684,
      'y_min': -635,
      'y_max': 262,
      'ha': 897,
      'o': 'm 12 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 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 z m 906 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 z m 907 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 z'
    },
    'unpitchedPercussionClef1': {
      'x_min': 0,
      'x_max': 382,
      'y_min': -250,
      'y_max': 250,
      'ha': 500,
      'o': 'm 320 338 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 l 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 z m 20 -360 l 210 -360 b 230 -338 222 -360 230 -350 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 z'
    },
    '6stringTabClef': {
      'x_min': -3,
      'x_max': 408,
      'y_min': -748,
      'y_max': 764,
      'ha': 1512,
      'o': 'm 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 z m 88 -328 l 160 -125 l 420 -125 l 491 -328 l 588 -328 l 350 348 l 238 348 l -4 -328 z m 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 l 557 1024 l 557 1100 z m 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 b 337 -1001 458 -949 418 -1001 l 125 -1001 z m 292 -475 b 428 -583 389 -475 428 -514 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 z m 292 256 l 397 -52 l 181 -52 z'
    },
    'timeSig0': {
      'x_min': 20,
      'x_max': 450,
      'y_min': -250,
      'y_max': 251,
      'ha': 501,
      'o': 'm 338 -360 b 648 0 510 -360 648 -199 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 z m 230 10 b 338 317 230 180 278 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 z'
    },
    'timeSig1': {
      'x_min': 20,
      'x_max': 314,
      'y_min': -250,
      'y_max': 251,
      'ha': 501,
      'o': 'm 29 0 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 l 35 19 b 29 0 35 19 29 10 z'
    },
    'timeSig2': {
      'x_min': 20,
      'x_max': 426,
      'y_min': -257,
      'y_max': 254,
      'ha': 511,
      'o': 'm 29 170 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 -314 114 -153 58 -223 b 69 -370 33 -336 40 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 b 589 -111 606 -114 599 -111 b 570 -125 577 -111 573 -117 b 569 -130 570 -127 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 z'
    },
    'timeSig3': {
      'x_min': 20,
      'x_max': 401,
      'y_min': -251,
      'y_max': 249,
      'ha': 500,
      'o': 'm 29 -203 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 b 285 359 300 357 292 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 z'
    },
    'timeSig4': {
      'x_min': 20,
      'x_max': 450,
      'y_min': -250,
      'y_max': 251,
      'ha': 501,
      'o': 'm 58 -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 l 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 334 246 -9 477 318 b 482 341 481 337 482 338 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 33 -121 35 -118 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 z'
    },
    'timeSig5': {
      'x_min': 20,
      'x_max': 383,
      'y_min': -251,
      'y_max': 246,
      'ha': 497,
      'o': 'm 29 -183 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 l 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 z'
    },
    'timeSig6': {
      'x_min': 20,
      'x_max': 414,
      'y_min': -249,
      'y_max': 251,
      'ha': 500,
      'o': 'm 29 4 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 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 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 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 l 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 z'
    },
    'timeSig8': {
      'x_min': 20,
      'x_max': 416,
      'y_min': -259,
      'y_max': 259,
      'ha': 518,
      'o': 'm 29 -190 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 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 z m 111 -183 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 b 111 -183 199 -325 111 -276 z m 314 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 b 168 240 291 125 168 150 b 314 331 168 301 251 331 z'
    },
    'timeSig9': {
      'x_min': 20,
      'x_max': 414,
      'y_min': -249,
      'y_max': 251,
      'ha': 500,
      'o': 'm 246 -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 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 z m 220 161 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 b 220 161 259 0 220 72 z'
    },
    'timeSigCommon': {
      'x_min': 5,
      'x_max': 424,
      'y_min': -249,
      'y_max': 251,
      'ha': 500,
      'o': 'm 101 -262 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 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 z'
    },
    'timeSigCutCommon': {
      'x_min': 0,
      'x_max': 418,
      'y_min': -359,
      'y_max': 361,
      'ha': 720,
      'o': 'm 225 -346 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 l 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 z m 232 259 b 236 262 233 262 235 262 b 252 239 243 262 252 251 l 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 z'
    },
    'noteheadDoubleWhole': {
      'x_min': 0,
      'x_max': 599,
      'y_min': -155,
      'y_max': 155,
      'ha': 310,
      'o': 'm 423 -180 b 733 1 657 -180 733 -98 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 l 747 223 b 733 212 740 223 733 217 l 733 1 b 438 180 733 104 572 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 z m 284 58 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 z m 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 l 829 223 b 815 212 824 223 815 217 z m 82 212 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 l 96 223 b 82 212 88 223 82 217 z m 13 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 l 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 z'
    },
    'noteheadWhole': {
      'x_min': 0,
      'x_max': 422,
      'y_min': -125,
      'y_max': 125,
      'ha': 250,
      'o': 'm 0 3 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 b 0 3 120 180 0 101 z m 156 56 b 160 91 156 68 157 79 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 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 42 -63 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 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 z'
    },
    'noteheadBlack': {
      'x_min': 0,
      'x_max': 295,
      'y_min': -125,
      'y_max': 125,
      'ha': 250,
      'o': 'm 0 -60 b 140 -180 0 -135 62 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 z'
    },
    'noteheadXWhole': {
      'x_min': 0,
      'x_max': 377,
      'y_min': -125,
      'y_max': 125,
      'ha': 250,
      'o': 'm 0 148 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 l 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 z m 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 l 386 -141 l 272 -45 l 157 -141 l 88 -141 z'
    },
    'noteheadXHalf': {
      'x_min': 0,
      'x_max': 334,
      'y_min': -125,
      'y_max': 125,
      'ha': 250,
      'o': 'm 32 -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 l 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 z m 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 l 36 148 z'
    },
    'noteheadXBlack': {
      'x_min': 0,
      'x_max': 290,
      'y_min': -125,
      'y_max': 125,
      'ha': 250,
      'o': 'm 0 -158 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 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 z'
    },
    'noteheadCircleX': {
      'x_min': 0,
      'x_max': 249,
      'y_min': -125,
      'y_max': 125,
      'ha': 250,
      'o': 'm 0 0 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 b 0 0 81 180 0 99 z m 69 84 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 b 69 84 40 32 50 60 z m 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z m 209 1 l 291 84 b 317 0 307 60 317 30 b 292 -82 317 -30 308 -59 z m 179 138 b 261 112 210 138 238 128 l 180 30 l 98 112 b 179 138 121 128 148 138 z'
    },
    'noteheadTriangleUpWhole': {
      'x_min': 0,
      'x_max': 319,
      'y_min': -125,
      'y_max': 125,
      'ha': 250,
      'o': 'm 0 -166 b 14 -180 0 -173 6 -180 l 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 z m 145 -96 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 l 170 -137 b 145 -96 157 -137 145 -109 z'
    },
    'noteheadTriangleUpHalf': {
      'x_min': 0,
      'x_max': 285,
      'y_min': -125,
      'y_max': 125,
      'ha': 250,
      'o': 'm 14 -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 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 z m 115 -138 l 232 76 l 297 -37 l 246 -138 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'
    },
    'noteheadDiamondWhole': {
      'x_min': 0,
      'x_max': 270,
      'y_min': -125,
      'y_max': 125,
      'ha': 250,
      'o': 'm 4 7 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 l 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 z m 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 l 66 40 b 62 48 65 42 62 45 z'
    },
    'noteheadDiamondHalf': {
      'x_min': 0,
      'x_max': 251,
      'y_min': -125,
      'y_max': 125,
      'ha': 250,
      'o': 'm 4 -7 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 l 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 z m 215 73 b 266 26 238 73 266 50 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 z'
    },
    'noteheadDiamondBlack': {
      'x_min': 0,
      'x_max': 250,
      'y_min': -125,
      'y_max': 125,
      'ha': 250,
      'o': 'm 4 -7 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 l 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 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'
    },
    'augmentationDot': {
      'x_min': 0,
      'x_max': 100,
      'y_min': -50,
      'y_max': 50,
      'ha': 100,
      'o': 'm 72 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 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.1921176545985,
      'y_max': 9,
      'ha': 819.1921176545985,
      'o': 'm 284 -688 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 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 14 13 53 4 42 13 b 0 -9 6 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 z'
    },
    'flag8thDown': {
      'x_min': 0,
      'x_max': 306,
      'y_min': -14,
      'y_max': 808,
      'ha': 822,
      'o': 'm 16 -20 b 58 12 43 -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 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 16 -20 0 -16 7 -20 z'
    },
    'flag16thUp': {
      'x_min': 0,
      'x_max': 279,
      'y_min': -813,
      'y_max': 2,
      'ha': 815,
      'o': 'm 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 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 1 16 3 0 1 l 0 -570 z m 78 -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 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 z'
    },
    'flag16thDown': {
      'x_min': 0,
      'x_max': 290.8951581511223,
      'y_min': -9,
      'y_max': 812.0064,
      'ha': 821.0064,
      'o': 'm 0 -12 b 24 -13 0 -12 16 -13 b 53 6 33 -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 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 z m 58 317 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 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 z'
    },
    'flag32ndUp': {
      'x_min': 0,
      'x_max': 261,
      'y_min': -812,
      'y_max': 149,
      'ha': 961,
      'o': 'm 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 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 17 215 45 200 26 215 b 0 197 9 215 0 197 l 0 -609 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 55 -386 b 73 -367 55 -384 65 -369 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 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 z'
    },
    'flag32ndDown': {
      'x_min': 0,
      'x_max': 273,
      'y_min': -172,
      'y_max': 812,
      'ha': 984,
      'o': 'm 17 -248 b 48 -219 27 -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 351 793 356 785 351 789 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 l 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 17 -248 0 -229 9 -248 z m 56 76 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 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 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'
    },
    'flag64thUp': {
      'x_min': 0,
      'x_max': 261,
      'y_min': -812,
      'y_max': 347,
      'ha': 1159,
      'o': 'm 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 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 17 500 45 485 26 500 b 0 482 9 500 0 482 z m 56 193 b 300 24 138 193 220 157 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 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 55 -386 b 73 -367 55 -384 65 -369 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 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 z'
    },
    'flag64thDown': {
      'x_min': 0,
      'x_max': 273,
      'y_min': -376,
      'y_max': 812,
      'ha': 1188,
      'o': 'm 17 -541 b 48 -513 27 -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 351 793 356 785 351 789 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 l 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 17 -541 0 -523 9 -541 z m 56 76 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 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 z m 229 36 b 311 128 264 73 289 102 l 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 z m 217 609 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 b 217 609 86 501 153 533 z'
    },
    'flag128thUp': {
      'x_min': 0,
      'x_max': 261,
      'y_min': -812,
      'y_max': 533,
      'ha': 1345,
      'o': 'm 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 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 17 768 45 753 26 768 b 0 750 9 768 0 750 l 0 -609 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 55 -386 b 73 -367 55 -384 65 -369 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 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 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'
    },
    'flag128thDown': {
      'x_min': 0,
      'x_max': 273,
      'y_min': -580,
      'y_max': 812,
      'ha': 1392,
      'o': 'm 17 -835 b 48 -806 27 -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 351 793 356 785 351 789 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 l 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 17 -835 0 -816 9 -835 z m 229 331 b 310 423 264 369 289 397 b 330 350 318 396 325 366 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 z m 56 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 l 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 z m 56 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 l 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 z m 217 609 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 b 217 609 86 501 153 533 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 66 73 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 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 z'
    },
    'accidentalNatural': {
      'x_min': 0,
      'x_max': 168,
      'y_min': -335,
      'y_max': 341,
      'ha': 676,
      'o': 'm 0 -268 b 12 -281 0 -276 4 -281 b 22 -278 13 -281 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 l 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 z m 176 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 l 53 56 b 176 114 53 76 141 114 z'
    },
    'accidentalSharp': {
      'x_min': 0,
      'x_max': 249,
      'y_min': -348,
      'y_max': 350,
      'ha': 698,
      'o': 'm 12 37 b 49 53 17 37 45 50 b 53 55 50 53 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 12 -301 0 -297 4 -301 b 17 -300 13 -301 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 223 -216 219 -217 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 l 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 12 37 0 42 4 37 z m 111 -43 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 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 z'
    },
    'accidentalDoubleSharp': {
      'x_min': 0,
      'x_max': 247,
      'y_min': -125,
      'y_max': 127,
      'ha': 252,
      'o': 'm 0 -111 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 l 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 291 49 279 50 285 49 b 346 63 314 49 336 55 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 z'
    },
    'accidentalDoubleFlat': {
      'x_min': 0,
      'x_max': 411,
      'y_min': -175,
      'y_max': 437,
      'ha': 612,
      'o': 'm 17 -245 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 l 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 z m 66 72 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 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 z m 328 39 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 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 z'
    },
    'accidentalParensLeft': {
      'x_min': 0,
      'x_max': 141,
      'y_min': -248,
      'y_max': 247,
      'ha': 495,
      'o': 'm 199 -357 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 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 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 174 -161 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 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 z m 101 60 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 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 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 177 -163 b 289 -249 210 -186 245 -226 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 166 216 196 204 180 210 b 161 217 164 216 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 z m 102 60 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 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 z m 409 26 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 b 409 26 413 -115 409 -30 z'
    },
    'accidentalQuarterToneSharpStein': {
      'x_min': 0,
      'x_max': 179,
      'y_min': -353,
      'y_max': 307,
      'ha': 660,
      'o': 'm 12 -315 b 85 -285 17 -315 76 -289 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 246 -86 258 -91 253 -86 b 240 -88 245 -86 242 -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 l 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 12 23 0 27 4 23 b 17 24 13 23 16 24 b 85 53 17 24 73 49 b 89 55 86 53 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 12 -315 0 -311 4 -315 z'
    },
    'accidentalThreeQuarterTonesSharpStein': {
      'x_min': 3,
      'x_max': 317,
      'y_min': -347,
      'y_max': 369,
      'ha': 716,
      'o': 'm 14 -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 399 -22 445 -3 408 -17 b 383 -6 387 -22 383 -22 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 l 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 128 216 131 217 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 z m 114 -48 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 b 114 -48 114 -121 114 -86 z m 253 19 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 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 z'
    },
    'accidentalBuyukMucennebFlat': {
      'x_min': 1,
      'x_max': 287,
      'y_min': -174,
      'y_max': 438,
      'ha': 612,
      'o': 'm 1 480 l 1 406 b 12 395 1 400 4 395 b 79 419 14 395 76 418 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 171 176 196 190 184 176 b 167 177 170 176 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 l 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 z m 154 73 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 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 z'
    },
    'accidentalBakiyeFlat': {
      'x_min': -1,
      'x_max': 286,
      'y_min': -175,
      'y_max': 439,
      'ha': 614,
      'o': 'm -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 150 276 147 210 150 268 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 l 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 z m 148 27 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 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 z'
    },
    'accidentalKomaSharp': {
      'x_min': 0,
      'x_max': 229,
      'y_min': -337,
      'y_max': 322,
      'ha': 659,
      'o': 'm 10 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 127 -261 17 -304 117 -264 b 138 -276 138 -261 138 -262 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 l 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 z'
    },
    'accidentalKucukMucennebSharp': {
      'x_min': -1,
      'x_max': 339,
      'y_min': -338,
      'y_max': 321,
      'ha': 659,
      'o': 'm -1 -45 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 209 -262 99 -305 199 -265 b 220 -278 220 -262 220 -264 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 477 144 488 134 487 144 b 471 141 475 144 472 141 l 471 143 b 274 68 471 143 282 71 b 268 66 272 68 269 66 b 264 71 264 66 264 69 l 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 z'
    },
    'accidentalKoron': {
      'x_min': 0,
      'x_max': 300,
      'y_min': -472,
      'y_max': 157,
      'ha': 629,
      'o': 'm 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 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 z m 327 -7 l 52 -137 l 52 144 z'
    },
    'accidentalSori': {
      'x_min': 0,
      'x_max': 421,
      'y_min': -318,
      'y_max': 328,
      'ha': 646,
      'o': 'm 0 265 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 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 z m 183 138 l 330 76 l 330 -66 l 183 -128 z m 501 6 l 382 -45 l 382 55 z'
    },
    'articAccentAbove': {
      'x_min': 0,
      'x_max': 339,
      'y_min': 1,
      'y_max': 245,
      'ha': 244,
      'o': 'm 0 318 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 l 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 z'
    },
    'articAccentBelow': {
      'x_min': 0,
      'x_max': 339,
      'y_min': -244,
      'y_max': 0,
      'ha': 244,
      'o': 'm 0 -35 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 l 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 z'
    },
    'articTenutoAbove': {
      'x_min': -1,
      'x_max': 338,
      'y_min': 0,
      'y_max': 48,
      'ha': 48,
      'o': 'm 33 0 l 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 33 -69 l 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 60 0 b 121 60 94 0 121 27 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 z'
    },
    'articStaccatoBelow': {
      'x_min': 0,
      'x_max': 84,
      'y_min': -84,
      'y_max': 0,
      'ha': 84,
      'o': 'm 60 -121 b 121 -60 94 -121 121 -94 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 z'
    },
    'articStaccatissimoAbove': {
      'x_min': 1,
      'x_max': 100,
      'y_min': -2,
      'y_max': 293,
      'ha': 295,
      'o': 'm 1 390 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 b 1 390 35 422 3 409 z'
    },
    'articStaccatissimoBelow': {
      'x_min': 1,
      'x_max': 100,
      'y_min': -295,
      'y_max': 0,
      'ha': 295,
      'o': 'm 1 -393 b 72 -425 3 -412 35 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 z'
    },
    'articMarcatoAbove': {
      'x_min': -1,
      'x_max': 235,
      'y_min': -1,
      'y_max': 253,
      'ha': 254,
      'o': 'm -1 16 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 l 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 z'
    },
    'articMarcatoBelow': {
      'x_min': -1,
      'x_max': 235,
      'y_min': -254,
      'y_max': 0,
      'ha': 254,
      'o': 'm -1 -17 b 0 -24 -1 -20 -1 -23 l 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 z'
    },
    'fermataAbove': {
      'x_min': 3,
      'x_max': 605,
      'y_min': -3,
      'y_max': 329,
      'ha': 332,
      'o': 'm 4 14 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 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 z m 359 75 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 b 436 153 516 117 480 153 b 359 75 395 153 359 117 z'
    },
    'fermataBelow': {
      'x_min': 3,
      'x_max': 605,
      'y_min': -332,
      'y_max': 0,
      'ha': 332,
      'o': 'm 6 -35 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 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 z m 436 -157 b 516 -79 480 -157 516 -121 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 z'
    },
    'breathMarkComma': {
      'x_min': 1,
      'x_max': 152,
      'y_min': 2,
      'y_max': 251,
      'ha': 249,
      'o': 'm 1 271 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 19 32 29 26 26 b 27 14 26 17 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 b 1 271 42 361 1 321 z'
    },
    'breathMarkUpbow': {
      'x_min': 1,
      'x_max': 249,
      'y_min': 1,
      'y_max': 495,
      'ha': 494,
      'o': 'm 1 690 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 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 z'
    },
    'caesura': {
      'x_min': 0,
      'x_max': 384,
      'y_min': -1,
      'y_max': 532,
      'ha': 533,
      'o': 'm 258 1 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 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 z m 27 1 b 40 -1 32 -1 36 -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 z'
    },
    'caesuraCurved': {
      'x_min': 0,
      'x_max': 373,
      'y_min': 0,
      'y_max': 530,
      'ha': 530,
      'o': 'm 0 29 b 29 0 0 14 12 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 z m 223 27 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 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 z'
    },
    'restMaxima': {
      'x_min': 0,
      'x_max': 381,
      'y_min': -249,
      'y_max': 250,
      'ha': 499,
      'o': 'm 369 331 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 z m 23 -359 l 156 -359 b 180 -330 170 -359 180 -354 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 z'
    },
    'restDoubleWhole': {
      'x_min': 0,
      'x_max': 125,
      'y_min': 0,
      'y_max': 250,
      'ha': 250,
      'o': 'm 23 0 l 156 0 b 180 22 170 0 180 10 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 z'
    },
    'restWhole': {
      'x_min': 0,
      'x_max': 282,
      'y_min': -135,
      'y_max': 9,
      'ha': 144,
      'o': 'm 37 -194 l 369 -194 b 406 -157 389 -194 406 -177 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 z'
    },
    'restHalf': {
      'x_min': 0,
      'x_max': 282,
      'y_min': -2,
      'y_max': 142,
      'ha': 144,
      'o': 'm 37 -3 l 369 -3 b 406 35 389 -3 406 14 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 z'
    },
    'restQuarter': {
      'x_min': 1,
      'x_max': 270,
      'y_min': -375,
      'y_max': 373,
      'ha': 748,
      'o': 'm 168 -527 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 367 -317 297 -292 344 -308 b 372 -318 369 -317 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 238 -13 236 -26 238 -19 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 l 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 120 -166 135 -170 127 -166 b 1 -304 58 -166 1 -228 b 168 -527 1 -376 63 -446 z'
    },
    'rest8th': {
      'x_min': 0,
      'x_max': 247,
      'y_min': -251,
      'y_max': 174,
      'ha': 425,
      'o': 'm 39 81 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 l 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 z'
    },
    'rest16th': {
      'x_min': 0,
      'x_max': 320,
      'y_min': -500,
      'y_max': 179,
      'ha': 679,
      'o': 'm 115 -301 b 223 -271 153 -301 190 -288 b 229 -278 226 -271 229 -274 b 228 -282 229 -279 228 -281 l 91 -690 b 89 -694 91 -691 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 l 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 z'
    },
    'rest32nd': {
      'x_min': 0,
      'x_max': 363,
      'y_min': -500,
      'y_max': 426,
      'ha': 926,
      'o': 'm 0 -203 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 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 428 409 451 415 436 b 413 422 415 426 413 423 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 z'
    },
    'rest64th': {
      'x_min': 0,
      'x_max': 423,
      'y_min': -753,
      'y_max': 430,
      'ha': 1183,
      'o': 'm 0 -554 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 -644 223 -628 228 -635 b 226 -652 228 -647 226 -649 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 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 z'
    },
    'rest128th': {
      'x_min': 0,
      'x_max': 485,
      'y_min': -750,
      'y_max': 689,
      'ha': 1439,
      'o': 'm 118 -652 b 176 -642 138 -652 160 -648 b 180 -641 177 -642 179 -641 b 228 -621 197 -635 210 -629 b 232 -619 229 -621 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 l 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 517 806 480 796 501 801 b 521 808 518 806 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 z'
    },
    'dynamicPiano': {
      'x_min': -89,
      'x_max': 366,
      'y_min': -142,
      'y_max': 274,
      'ha': 416,
      'o': 'm -128 -187 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 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 z m 207 81 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 z'
    },
    'dynamicMezzo': {
      'x_min': -20,
      'x_max': 446,
      'y_min': -10,
      'y_max': 274,
      'ha': 284,
      'o': 'm -29 223 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 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 z'
    },
    'dynamicForte': {
      'x_min': -141,
      'x_max': 364,
      'y_min': -152,
      'y_max': 444,
      'ha': 596,
      'o': 'm -203 -122 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 315 203 105 235 194 b 289 336 269 323 284 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 l 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 z'
    },
    'dynamicRinforzando': {
      'x_min': -20,
      'x_max': 277,
      'y_min': 0,
      'y_max': 274,
      'ha': 274,
      'o': 'm -13 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 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 z'
    },
    'dynamicSforzando': {
      'x_min': 0,
      'x_max': 229,
      'y_min': -10,
      'y_max': 273,
      'ha': 283,
      'o': 'm 125 -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 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 z'
    },
    'dynamicZ': {
      'x_min': -30,
      'x_max': 244,
      'y_min': -10,
      'y_max': 268,
      'ha': 278,
      'o': 'm -24 -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 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 z'
    },
    'ornamentTrill': {
      'x_min': 0,
      'x_max': 521,
      'y_min': -10,
      'y_max': 390,
      'ha': 400,
      'o': 'm 95 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 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 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 196 48 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 b 279 229 276 240 276 236 b 292 151 279 204 292 177 b 212 30 292 88 253 30 b 196 48 200 30 196 37 z'
    },
    'ornamentTurn': {
      'x_min': 0,
      'x_max': 460,
      'y_min': 0,
      'y_max': 218,
      'ha': 218,
      'o': 'm 0 148 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 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 z'
    },
    'ornamentTurnSlash': {
      'x_min': 0,
      'x_max': 460,
      'y_min': -90,
      'y_max': 306,
      'ha': 396,
      'o': 'm 0 147 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 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 z'
    },
    'ornamentMordent': {
      'x_min': 1,
      'x_max': 729,
      'y_min': -73,
      'y_max': 319,
      'ha': 392,
      'o': 'm 30 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 l 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 449 156 455 164 452 160 b 302 327 397 216 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 b 193 304 213 330 203 317 l 187 298 b 72 167 148 255 109 212 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 z'
    },
    'ornamentShortTrill': {
      'x_min': 0,
      'x_max': 725,
      'y_min': 0,
      'y_max': 245,
      'ha': 245,
      'o': 'm 0 72 b 29 58 0 63 7 58 b 88 92 50 58 72 78 b 143 141 105 109 124 125 b 147 144 144 143 145 144 b 174 160 158 153 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 436 65 b 469 92 449 72 459 84 b 524 141 487 109 505 125 l 528 145 b 533 148 531 147 531 148 b 554 160 541 154 550 160 b 577 143 562 160 569 154 b 703 10 585 135 691 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 452 167 533 258 491 213 l 445 158 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 192 304 212 328 203 315 l 17 107 b 0 72 12 96 0 76 z'
    },
    'ornamentTremblement': {
      'x_min': 1,
      'x_max': 985,
      'y_min': 0,
      'y_max': 244,
      'ha': 244,
      'o': 'm 1 72 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 147 143 147 144 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 b 488 111 386 13 446 72 b 520 141 498 122 508 132 b 524 144 521 143 523 144 b 552 160 536 153 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 899 141 b 930 160 913 153 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 821 160 825 164 822 163 l 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 b 569 304 590 328 580 315 l 444 161 b 302 325 392 222 311 317 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 z'
    },
    'ornamentPrecompAppoggTrill': {
      'x_min': 0,
      'x_max': 1119,
      'y_min': 0,
      'y_max': 481,
      'ha': 481,
      'o': 'm 121 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 l 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 z'
    },
    'ornamentPrecompSlideTrillDAnglebert': {
      'x_min': 2,
      'x_max': 1150,
      'y_min': -367,
      'y_max': 245,
      'ha': 612,
      'o': 'm 3 -144 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 l 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 z'
    },
    'ornamentPrecompSlideTrillBach': {
      'x_min': 0,
      'x_max': 1048,
      'y_min': -367,
      'y_max': 331,
      'ha': 698,
      'o': 'm 0 -144 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 66 -151 127 -336 66 -238 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 l 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 z'
    },
    'ornamentPrecompTrillSuffixDandrieu': {
      'x_min': 0,
      'x_max': 949,
      'y_min': 0,
      'y_max': 381,
      'ha': 381,
      'o': 'm 0 73 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 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 z'
    },
    'ornamentPrecompDoubleCadenceUpperPrefix': {
      'x_min': 0,
      'x_max': 1278,
      'y_min': 0,
      'y_max': 247,
      'ha': 247,
      'o': 'm 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 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 z'
    },
    'ornamentPrecompDoubleCadenceUpperPrefixTurn': {
      'x_min': 0,
      'x_max': 1277,
      'y_min': -62,
      'y_max': 333,
      'ha': 395,
      'o': 'm 0 289 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 l 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 z'
    },
    'ornamentPrecompTrillLowerSuffix': {
      'x_min': 0,
      'x_max': 859,
      'y_min': -222,
      'y_max': 246,
      'ha': 468,
      'o': 'm 0 73 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 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 z'
    },
    'stringsDownBow': {
      'x_min': 0,
      'x_max': 312,
      'y_min': 0,
      'y_max': 318,
      'ha': 318,
      'o': 'm 17 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 l 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 z'
    },
    'stringsUpBow': {
      'x_min': 1,
      'x_max': 249,
      'y_min': 1,
      'y_max': 495,
      'ha': 494,
      'o': 'm 1 690 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 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 z'
    },
    'stringsHarmonic': {
      'x_min': 0,
      'x_max': 200,
      'y_min': 0,
      'y_max': 200,
      'ha': 200,
      'o': 'm 144 0 b 288 144 223 0 288 65 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 z m 39 144 b 144 249 39 203 86 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 z'
    },
    'pluckedSnapPizzicatoAbove': {
      'x_min': 0,
      'x_max': 200,
      'y_min': 0,
      'y_max': 300,
      'ha': 300,
      'o': 'm 144 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 b 144 0 0 63 65 0 z m 39 144 b 121 246 39 193 73 236 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 z'
    },
    'pluckedSnapPizzicatoBelow': {
      'x_min': 0,
      'x_max': 200,
      'y_min': 0,
      'y_max': 300,
      'ha': 300,
      'o': 'm 121 145 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 z m 39 288 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 z'
    },
    'pluckedLeftHandPizzicato': {
      'x_min': 0,
      'x_max': 272,
      'y_min': 0,
      'y_max': 272,
      'ha': 272,
      'o': 'm 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 l 392 219 l 219 219 l 219 392 l 173 392 l 173 219 z'
    },
    'keyboardPedalPed': {
      'x_min': 0,
      'x_max': 1019,
      'y_min': -8,
      'y_max': 555,
      'ha': 563,
      'o': 'm 122 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 l 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 z m 1405 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 z m 756 282 b 815 403 756 346 772 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 z'
    },
    'keyboardPedalUp': {
      'x_min': 0,
      'x_max': 450,
      'y_min': 0,
      'y_max': 450,
      'ha': 450,
      'o': 'm 66 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 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 z m 271 324 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 b 271 324 291 271 271 291 z'
    },
    'pictChokeCymbal': {
      'x_min': 1,
      'x_max': 152,
      'y_min': 2,
      'y_max': 251,
      'ha': 249,
      'o': 'm 1 271 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 19 32 29 26 26 b 27 14 26 17 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 b 1 271 42 361 1 321 z'
    },
    'wiggleArpeggiatoUp': {
      'x_min': -33,
      'x_max': 292,
      'y_min': 0,
      'y_max': 119,
      'ha': 119,
      'o': 'm -29 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 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 z'
    },
    'arrowheadBlackUp': {
      'x_min': 0,
      'x_max': 228,
      'y_min': 0,
      'y_max': 299,
      'ha': 299,
      'o': 'm 0 20 b 19 1 0 4 7 1 b 166 50 43 16 160 50 b 308 1 171 50 289 13 b 312 0 310 1 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 b 0 20 111 274 0 30 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 312 431 328 419 321 431 b 308 429 311 431 310 429 b 166 380 289 418 171 380 b 19 429 160 380 43 415 b 0 410 7 429 0 426 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 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 1123 115 1158 124 1145 b 122 1110 124 1119 122 1115 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 l 330 1848 l 164 2176 l 1 1848 z'
    },
    'arpeggiatoDown': {
      'x_min': 1,
      'x_max': 229,
      'y_min': -4,
      'y_max': 1500,
      'ha': 1504,
      'o': 'm 1 323 l 164 -6 l 330 323 l 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 124 1047 122 1056 124 1051 b 105 998 124 1025 115 1012 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 z'
    },
    'repeat1Bar': {
      'x_min': 0,
      'x_max': 532,
      'y_min': -250,
      'y_max': 279,
      'ha': 529,
      'o': 'm 0 -350 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 l 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 z m 586 -161 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 b 586 -161 626 -71 586 -111 z m 0 197 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 b 0 197 40 288 0 248 z'
    },
    'repeat2Bars': {
      'x_min': 0,
      'x_max': 762,
      'y_min': -250,
      'y_max': 279,
      'ha': 529,
      'o': 'm 0 -350 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 l 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 z m 343 -360 l 485 -360 b 516 -340 498 -360 508 -348 l 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 z m 917 -161 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 b 917 -161 958 -71 917 -111 z m 89 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 z'
    },
    'repeat4Bars': {
      'x_min': 0,
      'x_max': 1232,
      'y_min': -250,
      'y_max': 279,
      'ha': 529,
      'o': 'm 331 -350 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 l 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 z m 1008 -350 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 l 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 z m 688 -360 l 831 -360 b 861 -340 844 -360 854 -348 l 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 z m 0 -350 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 l 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 z m 1683 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 z m 0 197 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 b 0 197 40 288 0 248 z'
    },
    'repeatBarSlash': {
      'x_min': 0,
      'x_max': 532,
      'y_min': -250,
      'y_max': 279,
      'ha': 529,
      'o': 'm 12 -360 l 154 -360 b 184 -340 167 -360 177 -348 l 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 z'
    }
  },
  'fontFamily': 'Bravura',
  'resolution': 1000,
  'generatedOn': '2020-04-13T11:57:57.152Z'
};

/***/ }),

/***/ "./src/fonts/bravura_metrics.js":
/*!**************************************!*\
  !*** ./src/fonts/bravura_metrics.js ***!
  \**************************************/
/*! exports provided: BravuraMetrics */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BravuraMetrics", function() { return BravuraMetrics; });
var BravuraMetrics = {
  name: 'Bravura',
  smufl: true,
  stave: {
    padding: 12
  },
  clef: {
    "default": {
      point: 32,
      width: 26
    },
    small: {
      point: 26,
      width: 20
    },
    annotations: {
      '8va': {
        smuflCode: 'timeSig8',
        "default": {
          point: 18,
          treble: {
            line: -1.4,
            shiftX: 12
          }
        },
        small: {
          point: 16,
          treble: {
            line: -0.2,
            shiftX: 8
          }
        }
      },
      '8vb': {
        smuflCode: 'timeSig8',
        "default": {
          point: 18,
          treble: {
            line: 6,
            shiftX: 10
          },
          bass: {
            line: 3.5,
            shiftX: 1
          }
        },
        small: {
          point: 16,
          treble: {
            line: 5.3,
            shiftX: 6
          },
          bass: {
            line: 3.1,
            shiftX: 0.5
          }
        }
      }
    },
    // These may no longer be necessary
    lineCount: {
      '8': {
        point: 55,
        shiftY: 14
      },
      '7': {
        point: 47,
        shiftY: 8
      },
      '6': {
        point: 32,
        shiftY: 1
      },
      '5': {
        point: 30,
        shiftY: -6
      },
      '4': {
        point: 23,
        shiftY: -12
      }
    }
  },
  pedalMarking: {
    up: {
      point: 40
    },
    down: {
      point: 34
    }
  },
  // These are for numeric digits, such as in time signatures
  digits: {
    // used by timesig
    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
    }
  },
  stem: {
    // 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
      },
      noteheadBlack: {
        offsetYBaseStemDown: 2
      },
      noteheadSquareWhite: {
        offsetYBaseStemDown: -5,
        offsetYBaseStemUp: 5
      }
    }
  },
  // 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,
      tabStem: {
        shiftX: -1.75
      },
      staveTempo: {
        shiftX: -1
      }
    },
    clef: {
      gClef: {
        "default": {
          scale: 1.1,
          shiftY: 1
        },
        small: {
          shiftY: 1.5
        }
      },
      fClef: {
        "default": {
          shiftY: -0.5
        }
      }
    },
    ornament: {
      ornamentTurn: {
        scale: 1.2
      },
      ornamentTurnSlash: {
        scale: 1.2
      }
    },
    stroke: {
      arrowheadBlackDown: {
        straight: {
          shiftX: -4.5
        },
        wiggly: {
          shiftX: -1,
          shiftY: 1
        }
      },
      arrowheadBlackUp: {
        straight: {
          shiftX: -0.85
        },
        wiggly: {
          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: {
      standard: {
        restQuarterStemUp: {
          point: 35
        },
        restQuarterStemDown: {
          point: 35
        }
      },
      custom: {
        'noteheadCircleXStemUp': {
          shiftX: 1.5
        },
        'noteheadCircleXStemDown': {
          shiftX: 0.25
        },
        'noteheadDiamondHalfStemUp': {
          shiftX: 1.5
        },
        'noteheadDiamondBlackStemUp': {
          shiftX: 1.5
        },
        'noteheadDiamondWholeStemUp': {
          shiftX: 1
        },
        'noteheadXHalfStemUp': {
          shiftX: -2
        },
        'noteheadXHalfStemDown': {
          shiftX: 1
        },
        'noteheadXWholeStemUp': {
          shiftX: -4
        },
        'noteheadXWholeStemDown': {
          shiftX: 1
        },
        'noteheadSquareWhiteStemDown': {
          shiftX: 0.25
        },
        'noteheadSquareWhiteStemUp': {
          shiftX: -0.75
        },
        'noteheadSquareBlackStemUp': {
          shiftX: -0.75
        },
        'noteheadTriangleUpWholeStemUp': {
          shiftX: -0.75
        }
      }
    }
  }
};

/***/ }),

/***/ "./src/fonts/custom_glyphs.js":
/*!************************************!*\
  !*** ./src/fonts/custom_glyphs.js ***!
  \************************************/
/*! exports provided: CustomFont */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CustomFont", function() { return CustomFont; });
var CustomFont = {
  'resolution': 1000,
  'familyName': '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 '
    },
    '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'
    }
  }
};

/***/ }),

/***/ "./src/fonts/custom_metrics.js":
/*!*************************************!*\
  !*** ./src/fonts/custom_metrics.js ***!
  \*************************************/
/*! exports provided: CustomMetrics */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CustomMetrics", function() { return CustomMetrics; });
var CustomMetrics = {
  name: 'Vexflow-Custom',
  smufl: false,
  glyphs: {}
};

/***/ }),

/***/ "./src/fonts/gonville_glyphs.js":
/*!**************************************!*\
  !*** ./src/fonts/gonville_glyphs.js ***!
  \**************************************/
/*! exports provided: GonvilleFont */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GonvilleFont", function() { return GonvilleFont; });
var GonvilleFont = {
  'glyphs': {
    'bracketTop': {
      'x_min': 0,
      'x_max': 559.421875,
      'ha': 571,
      'o': 'm 544 204 b 548 204 545 204 547 204 b 559 194 555 204 559 199 b 559 190 559 192 559 191 b 530 156 559 188 556 184 b 462 86 510 134 481 104 b 453 76 458 81 454 77 l 446 70 l 441 65 b 434 59 439 63 436 61 l 427 54 b 409 37 426 51 416 44 b 392 23 398 29 394 26 b 387 19 389 22 387 20 b 379 13 386 19 383 16 l 371 8 l 367 5 l 359 -1 l 337 -16 b 285 -48 319 -29 298 -41 l 279 -52 b 186 -95 255 -66 210 -87 l 175 -99 b 23 -129 127 -117 68 -129 b 17 -129 20 -129 19 -129 b 1 -123 2 -129 2 -129 b 0 -49 0 -122 0 -83 b 0 4 0 -22 0 1 b 27 11 2 9 4 9 b 185 31 78 12 145 20 b 198 34 186 31 193 33 b 314 73 234 44 277 58 b 349 88 328 79 340 84 b 353 90 352 90 353 90 b 363 94 353 90 357 93 b 371 98 367 97 371 98 b 428 129 372 98 413 120 b 461 148 441 136 454 144 b 468 151 464 149 466 151 b 472 154 469 152 470 154 b 481 161 473 155 477 158 b 525 190 490 166 518 186 l 534 197 b 540 201 536 198 539 199 b 544 204 541 202 544 204 '
    },
    'bracketBottom': {
      'x_min': 0,
      'x_max': 559.421875,
      'ha': 571,
      'o': 'm 5 127 b 14 127 6 127 9 127 b 51 126 25 127 43 127 b 175 98 93 122 138 112 l 186 94 b 279 51 210 86 255 65 b 285 47 280 51 283 48 b 319 27 291 44 311 31 l 326 22 b 359 0 332 19 352 4 l 367 -6 b 371 -9 368 -6 370 -8 l 379 -15 b 387 -22 383 -18 386 -20 l 398 -30 l 411 -40 l 417 -47 l 427 -55 l 434 -61 b 441 -66 436 -62 439 -65 l 446 -72 l 453 -77 l 462 -87 b 558 -188 490 -113 549 -176 b 559 -195 559 -191 559 -194 b 548 -205 559 -201 555 -205 b 541 -204 547 -205 544 -205 b 534 -198 539 -201 536 -199 l 525 -191 b 481 -162 518 -187 490 -167 b 472 -155 477 -159 472 -156 b 468 -152 470 -155 469 -154 b 461 -149 466 -152 464 -151 b 428 -130 454 -145 441 -137 b 371 -99 413 -122 372 -99 b 363 -95 371 -99 367 -98 b 353 -91 357 -94 353 -91 b 348 -90 353 -91 352 -91 b 332 -81 343 -87 341 -86 b 27 -12 230 -37 127 -13 b 0 -5 4 -11 2 -11 b 0 58 0 -2 0 27 b 0 122 0 88 0 120 b 5 127 1 124 4 126 '
    },
    'barlineTick': {
      'x_min': -80.3125,
      'x_max': 78.9375,
      'ha': 81,
      'o': 'm 63 191 b 69 192 65 192 66 192 b 77 188 72 192 76 191 b 78 183 78 187 78 186 b 74 158 78 179 77 172 l 66 115 b 9 -161 49 30 10 -158 b -10 -187 6 -172 -1 -181 b -34 -194 -17 -191 -25 -194 b -80 -147 -58 -194 -80 -174 b -80 -141 -80 -144 -80 -142 b 9 70 -80 -134 -73 -117 l 49 163 b 63 191 59 188 61 190 '
    },
    'breathMarkTick': {
      'x_min': -80.3125,
      'x_max': 78.9375,
      'ha': 81,
      'o': 'm 63 191 b 69 192 65 192 66 192 b 77 188 72 192 76 191 b 78 183 78 187 78 186 b 74 158 78 179 77 172 l 66 115 b 9 -161 49 30 10 -158 b -10 -187 6 -172 -1 -181 b -34 -194 -17 -191 -25 -194 b -80 -147 -58 -194 -80 -174 b -80 -141 -80 -144 -80 -142 b 9 70 -80 -134 -73 -117 l 49 163 b 63 191 59 188 61 190 '
    },
    'segno': {
      'x_min': -330.75,
      'x_max': 329.390625,
      'ha': 336,
      'o': 'm -133 483 b -117 484 -127 484 -122 484 b 31 373 -51 484 9 440 b 35 348 34 365 35 356 b -25 285 35 313 10 285 b -87 331 -55 285 -76 302 b -167 402 -100 376 -133 402 b -191 398 -175 402 -183 401 b -227 341 -215 388 -227 369 b -225 320 -227 334 -227 327 b -13 74 -209 230 -125 133 b 6 65 -4 70 5 66 l 9 63 l 10 65 b 117 231 12 68 40 112 l 189 341 l 242 424 b 268 460 262 456 264 458 b 283 464 273 463 277 464 b 308 438 296 464 308 453 l 308 437 b 287 396 308 430 308 428 l 95 98 l 59 43 l 58 41 l 65 37 b 253 -156 151 -8 217 -77 b 281 -285 272 -199 281 -244 b 148 -481 281 -381 231 -463 b 115 -485 137 -484 126 -485 b -32 -376 51 -485 -9 -442 b -36 -349 -35 -366 -36 -358 b 25 -287 -36 -315 -12 -287 b 85 -333 54 -287 74 -302 b 166 -403 99 -377 133 -403 b 190 -399 174 -403 182 -402 b 225 -342 215 -390 225 -370 b 224 -322 225 -335 225 -328 b 12 -76 208 -231 125 -134 b -8 -66 2 -72 -6 -68 l -10 -65 l -12 -66 b -118 -231 -13 -68 -42 -113 l -190 -342 l -243 -426 b -269 -462 -264 -458 -265 -458 b -284 -466 -274 -464 -279 -466 b -310 -440 -298 -466 -310 -455 l -310 -438 b -288 -398 -310 -430 -308 -430 l -96 -99 l -59 -44 l -59 -43 l -66 -38 b -281 284 -198 33 -281 158 l -281 284 b -133 483 -281 392 -220 474 m 254 177 b 266 179 258 177 262 179 b 319 149 287 179 307 167 b 329 115 326 140 329 127 b 319 79 329 102 326 90 b 268 51 307 61 287 51 b 221 72 250 51 234 58 b 205 115 210 84 205 99 b 254 177 205 142 223 170 m -281 -54 b -269 -52 -277 -52 -273 -52 b -223 -73 -253 -52 -235 -59 b -206 -116 -212 -84 -206 -101 b -216 -151 -206 -129 -209 -141 b -269 -179 -228 -170 -249 -179 b -314 -159 -285 -179 -302 -173 b -330 -116 -325 -147 -330 -131 b -281 -54 -330 -88 -313 -61 '
    },
    'coda': {
      'x_min': -311.6875,
      'x_max': 310.328125,
      'ha': 317,
      'o': 'm -9 388 b -2 390 -8 390 -5 390 b 5 388 1 390 4 390 b 19 378 10 387 16 383 b 23 333 23 371 23 371 b 24 298 23 299 24 298 b 81 276 34 298 65 285 b 213 91 145 240 190 177 b 224 24 217 76 224 36 b 257 24 224 24 235 24 b 299 19 292 24 292 24 b 310 -1 306 15 310 6 b 299 -23 310 -11 306 -19 b 257 -27 292 -27 292 -27 b 224 -29 235 -27 224 -29 b 213 -95 224 -40 217 -80 b 81 -280 190 -181 145 -244 b 24 -301 65 -290 34 -301 b 23 -335 24 -301 23 -303 l 23 -340 b 17 -381 23 -374 23 -374 b -1 -391 13 -388 5 -391 b -21 -381 -9 -391 -17 -388 b -27 -340 -27 -374 -27 -374 l -27 -335 b -28 -301 -27 -303 -27 -301 b -85 -280 -38 -301 -69 -290 b -217 -95 -149 -244 -194 -181 b -228 -29 -221 -80 -228 -40 b -259 -27 -228 -29 -238 -27 b -300 -23 -294 -27 -294 -27 b -311 -2 -307 -19 -311 -11 b -294 23 -311 8 -304 19 b -259 24 -291 23 -284 24 b -228 24 -239 24 -228 24 b -217 91 -228 36 -221 76 b -85 276 -194 177 -149 240 b -28 298 -69 285 -38 298 b -27 333 -27 298 -27 299 b -27 371 -27 362 -27 369 b -9 388 -24 378 -17 385 m -27 136 b -28 247 -27 197 -28 247 b -61 216 -31 247 -53 226 b -123 33 -95 172 -121 98 l -125 24 l -76 24 l -27 24 l -27 136 m 29 242 b 24 247 27 245 24 247 b 23 136 24 247 23 197 l 23 24 l 72 24 l 121 24 l 119 33 b 29 242 115 116 77 206 m -27 -140 l -27 -27 l -76 -27 l -125 -27 l -123 -36 b -61 -220 -121 -102 -95 -176 b -28 -251 -53 -230 -31 -251 b -27 -140 -28 -251 -27 -201 m 119 -36 l 121 -27 l 72 -27 l 23 -27 l 23 -140 b 24 -251 23 -201 24 -251 b 57 -220 27 -251 49 -230 b 119 -36 91 -176 117 -102 '
    },
    'gClef': {
      'x_min': -1.359375,
      'x_max': 847.96875,
      'ha': 865,
      'o': 'm 488 1499 b 495 1500 490 1500 492 1500 b 541 1465 507 1500 521 1490 b 679 1078 622 1372 679 1210 b 677 1050 679 1068 677 1060 b 477 642 668 893 604 764 l 443 609 l 431 596 l 431 592 l 438 562 l 449 508 l 460 458 b 481 355 475 390 481 355 b 481 355 481 355 481 355 b 490 356 481 355 485 355 b 528 358 495 356 511 358 b 558 356 540 358 552 356 b 839 95 699 338 808 237 b 847 22 845 72 847 47 b 631 -303 847 -113 766 -242 b 620 -309 623 -308 620 -309 l 620 -310 b 631 -359 620 -310 626 -333 l 646 -435 l 660 -496 b 672 -588 668 -535 672 -563 b 664 -653 672 -610 669 -630 b 383 -875 630 -792 509 -875 b 201 -810 321 -875 257 -855 b 129 -680 151 -768 129 -730 b 274 -530 129 -592 200 -530 b 351 -553 300 -530 326 -538 b 412 -669 393 -582 412 -626 b 287 -805 412 -735 366 -800 l 279 -805 l 285 -809 b 383 -830 318 -823 351 -830 b 586 -718 464 -830 540 -789 b 626 -584 612 -678 626 -631 b 619 -528 626 -566 623 -548 b 612 -495 619 -526 616 -510 b 577 -324 590 -387 577 -324 b 577 -324 577 -324 577 -324 b 568 -326 575 -324 571 -324 b 528 -334 558 -328 537 -333 b 465 -338 506 -337 485 -338 b 24 -11 269 -338 87 -206 b -1 145 8 41 -1 93 b 96 442 -1 249 32 351 b 322 714 166 541 236 626 l 352 745 l 345 782 l 332 843 l 315 921 b 303 984 310 950 304 978 b 295 1082 298 1017 295 1049 b 413 1426 295 1208 336 1329 b 488 1499 436 1456 477 1496 m 549 1301 b 541 1301 547 1301 544 1301 b 411 1207 500 1301 447 1263 b 355 1004 374 1152 355 1079 b 359 942 355 984 356 963 b 371 881 362 927 363 917 l 385 818 b 392 782 389 799 392 784 l 392 782 b 434 828 393 782 424 816 b 607 1165 534 941 594 1060 b 608 1193 608 1175 608 1183 b 597 1270 608 1224 604 1254 b 549 1301 589 1286 571 1299 m 398 528 b 393 555 396 542 393 553 b 392 555 393 555 393 555 b 317 470 390 555 347 505 b 190 298 266 408 212 334 b 127 70 148 227 127 148 b 155 -77 127 19 137 -30 b 468 -303 209 -216 333 -303 b 519 -299 484 -303 502 -302 b 568 -284 541 -295 568 -287 l 568 -284 b 563 -263 568 -284 566 -274 l 534 -120 l 511 -13 l 496 61 l 480 133 b 469 187 472 176 469 187 b 468 188 469 187 469 188 b 416 162 462 188 430 172 b 337 13 364 126 337 69 b 413 -124 337 -40 363 -93 b 428 -144 424 -131 428 -137 b 428 -149 428 -145 428 -148 b 409 -166 426 -161 419 -166 b 394 -162 405 -166 400 -165 b 240 77 302 -122 240 -27 l 240 77 b 430 342 240 197 315 301 l 436 344 l 426 394 l 398 528 m 548 194 b 526 195 540 195 532 195 b 519 195 524 195 521 195 l 514 195 l 518 177 l 539 79 l 552 15 l 566 -48 l 594 -187 l 605 -240 b 612 -266 609 -254 611 -266 b 612 -266 612 -266 612 -266 b 641 -248 613 -266 630 -256 b 744 -98 692 -212 730 -156 b 751 -40 749 -79 751 -59 b 548 194 751 76 665 181 '
    },
    'cClef': {
      'x_min': 0,
      'x_max': 873.828125,
      'ha': 892,
      'o': 'm 0 0 l 0 703 l 81 703 l 164 703 l 164 0 l 164 -705 l 81 -705 l 0 -705 l 0 0 m 225 0 l 225 703 l 246 703 l 268 703 l 268 366 l 268 30 l 274 36 b 314 79 284 44 302 63 b 413 302 357 137 392 213 b 432 327 419 324 421 327 b 449 306 443 327 447 322 b 611 115 457 195 529 115 b 651 122 624 115 638 117 b 728 316 705 140 724 188 b 729 388 728 342 729 366 b 671 635 729 533 711 602 b 581 662 649 652 616 662 b 477 637 545 662 510 653 l 475 635 l 477 634 b 503 627 488 632 495 631 b 545 556 532 612 545 584 b 491 480 545 524 526 491 b 465 474 481 476 473 474 b 379 563 417 474 379 516 b 389 602 379 576 382 588 b 541 691 409 641 479 681 b 582 694 555 692 568 694 b 865 462 714 694 834 598 b 873 392 871 440 873 416 b 865 317 873 367 871 341 b 639 84 839 194 748 101 b 612 83 630 83 620 83 b 511 116 577 83 543 94 b 504 120 509 119 506 120 b 504 120 504 120 504 120 b 469 59 504 120 488 93 l 432 -1 l 469 -61 b 504 -122 488 -94 504 -122 b 504 -122 504 -122 504 -122 b 511 -117 506 -122 509 -120 b 612 -84 543 -95 577 -84 b 665 -91 630 -84 647 -87 b 869 -338 771 -122 850 -216 b 873 -392 872 -356 873 -374 b 798 -595 873 -469 847 -539 b 581 -695 741 -662 660 -695 b 406 -626 517 -695 454 -671 b 381 -563 389 -607 381 -585 b 465 -477 381 -519 413 -477 b 545 -559 514 -477 545 -519 b 503 -628 545 -587 532 -613 b 477 -635 495 -632 488 -634 l 475 -637 l 477 -638 b 581 -663 510 -655 545 -663 b 671 -637 616 -663 649 -653 b 729 -391 711 -603 729 -534 b 728 -317 729 -367 728 -344 b 623 -117 722 -173 698 -124 b 611 -116 619 -116 615 -116 b 449 -308 528 -116 457 -198 b 432 -328 447 -323 443 -328 b 413 -303 421 -328 419 -326 b 314 -80 392 -215 357 -138 b 274 -37 302 -65 284 -45 l 268 -31 l 268 -367 l 268 -705 l 246 -705 l 225 -705 l 225 0 '
    },
    'fClef': {
      'x_min': -1.359375,
      'x_max': 899.703125,
      'ha': 918,
      'o': 'm 307 349 b 332 351 315 351 323 351 b 443 340 367 351 408 347 b 741 47 607 306 720 195 b 744 0 743 31 744 16 b 660 -303 744 -90 713 -206 b 28 -755 534 -531 304 -695 b 14 -756 23 -755 19 -756 b -1 -741 4 -756 -1 -750 b 21 -720 -1 -731 1 -728 b 567 -56 337 -601 548 -344 b 568 -11 568 -41 568 -24 b 442 285 568 129 525 233 b 325 319 406 308 367 319 b 93 177 232 319 137 266 b 84 154 91 170 84 155 b 84 154 84 154 84 154 b 88 156 84 154 85 155 b 159 177 110 170 134 177 b 257 134 194 177 231 162 b 294 41 281 108 294 73 b 171 -97 294 -24 246 -90 b 156 -98 166 -97 161 -98 b 6 74 73 -98 6 -22 b 6 80 6 76 6 79 b 307 349 10 223 141 340 m 839 215 b 845 216 841 216 842 216 b 862 213 852 216 860 215 b 899 163 887 206 899 184 b 872 117 899 145 890 127 b 847 111 865 112 856 111 b 808 130 833 111 818 117 b 796 162 800 140 796 151 b 839 215 796 187 812 212 m 839 -112 b 845 -112 841 -112 842 -112 b 862 -115 852 -112 860 -113 b 899 -165 887 -122 899 -144 b 872 -210 899 -183 890 -201 b 847 -217 865 -215 856 -217 b 808 -198 833 -217 818 -210 b 796 -165 800 -188 796 -177 b 839 -112 796 -140 812 -116 '
    },
    'unpitchedPercussionClef1': {
      'x_min': 0,
      'x_max': 464.140625,
      'ha': 474,
      'o': 'm 0 0 l 0 347 l 76 347 l 153 347 l 153 0 l 153 -348 l 76 -348 l 0 -348 l 0 0 m 308 -1 l 308 347 l 386 347 l 464 347 l 464 -1 l 464 -348 l 386 -348 l 308 -348 l 308 -1 '
    },
    '6stringTabClef': {
      'x_min': -1.359375,
      'x_max': 680.5625,
      'ha': 694,
      'o': 'm 597 1042 b 604 1042 600 1042 602 1042 b 642 1002 627 1042 642 1022 b 619 966 642 988 635 974 b 439 927 574 942 503 927 l 426 927 l 426 921 b 430 838 428 893 430 866 b 345 480 430 696 398 560 b 179 391 307 423 249 391 b 156 392 171 391 164 392 b 138 394 149 394 142 394 b 103 434 115 396 103 416 b 129 471 103 451 111 466 b 141 474 133 473 137 474 b 172 459 153 474 164 469 b 181 455 175 456 176 455 b 187 456 182 455 185 455 b 253 520 212 460 234 483 b 315 836 294 605 315 714 b 311 928 315 867 314 898 b 302 945 310 943 311 942 b 245 953 283 950 262 953 b 130 891 193 953 149 931 b 84 860 119 870 102 860 b 36 905 61 860 39 877 b 36 910 36 907 36 909 b 80 970 36 931 50 949 b 249 1017 125 1000 187 1017 b 322 1009 273 1017 299 1014 l 341 1003 b 436 991 372 995 406 991 b 577 1031 495 991 545 1004 b 597 1042 583 1038 590 1041 m 416 360 b 424 360 419 360 421 360 b 481 309 454 360 479 338 b 503 145 484 280 495 199 b 585 -185 525 16 555 -106 b 630 -245 596 -213 613 -237 l 634 -247 l 638 -245 b 647 -244 641 -245 645 -244 b 680 -278 666 -244 680 -262 b 664 -308 680 -290 675 -301 b 638 -312 658 -310 650 -312 b 613 -309 631 -312 623 -310 b 477 -201 555 -303 502 -260 b 417 -2 460 -159 434 -72 b 416 5 417 1 416 5 b 416 5 416 5 416 5 b 411 -5 415 5 413 0 b 359 -97 397 -33 377 -70 b 353 -106 355 -102 353 -105 b 359 -112 353 -108 355 -109 b 409 -130 375 -123 390 -129 b 426 -134 420 -130 421 -131 b 431 -147 428 -137 431 -141 b 420 -162 431 -152 427 -159 b 382 -169 409 -166 396 -169 b 323 -155 363 -169 341 -165 l 317 -152 l 314 -155 b 62 -303 240 -240 148 -295 b 36 -305 55 -305 44 -305 b 23 -303 29 -305 24 -305 b -1 -273 6 -299 -1 -287 b 31 -240 -1 -256 10 -240 b 36 -240 32 -240 34 -240 b 42 -241 38 -241 39 -241 b 134 -204 63 -241 99 -226 b 367 288 265 -115 357 81 b 375 330 368 313 370 320 b 416 360 383 347 400 358 m 360 -359 b 379 -359 363 -359 371 -359 b 424 -360 396 -359 416 -359 b 646 -502 536 -373 624 -430 b 649 -527 649 -510 649 -519 b 530 -673 649 -578 604 -635 l 521 -677 l 529 -681 b 653 -811 592 -714 637 -762 b 660 -853 658 -827 660 -839 b 645 -911 660 -873 656 -892 b 426 -1021 608 -981 519 -1021 b 283 -989 377 -1021 328 -1011 b 235 -949 249 -972 239 -964 b 234 -936 234 -946 234 -941 b 234 -928 234 -934 234 -931 l 235 -925 l 234 -927 l 225 -934 b 87 -982 186 -966 138 -982 b 80 -982 85 -982 83 -982 b 55 -981 70 -981 58 -981 b 17 -943 32 -981 17 -964 b 54 -904 17 -921 35 -904 b 78 -914 62 -904 72 -909 l 83 -918 l 88 -918 b 190 -831 122 -918 166 -881 b 269 -506 242 -727 269 -612 b 268 -462 269 -492 269 -477 b 266 -449 266 -458 266 -452 b 265 -444 266 -445 266 -444 b 257 -446 264 -444 261 -445 b 132 -545 196 -470 152 -505 b 88 -573 122 -563 104 -573 b 39 -523 63 -573 39 -553 b 63 -476 39 -505 44 -494 b 360 -359 136 -408 235 -369 m 419 -424 b 393 -423 411 -423 406 -423 l 375 -423 l 377 -426 b 379 -439 377 -427 378 -434 b 383 -510 382 -463 383 -487 b 314 -811 383 -609 360 -710 b 266 -893 296 -850 285 -870 b 264 -898 265 -896 264 -898 l 264 -898 b 264 -898 264 -898 264 -898 b 268 -898 264 -898 266 -898 b 273 -898 270 -898 272 -898 b 300 -909 283 -898 291 -900 b 426 -957 340 -941 385 -957 b 476 -949 443 -957 460 -954 b 547 -853 522 -931 547 -893 b 485 -745 547 -816 526 -775 b 397 -707 460 -727 432 -714 b 366 -675 375 -703 366 -692 b 396 -642 366 -657 377 -645 b 530 -557 455 -637 511 -601 b 536 -527 534 -548 536 -537 b 419 -424 536 -480 490 -437 '
    },
    'timeSig0': {
      'x_min': 0,
      'x_max': 514.5,
      'ha': 525,
      'o': 'm 236 648 b 246 648 238 648 242 648 b 288 646 261 648 283 648 b 472 513 364 634 428 587 b 514 347 502 464 514 413 b 462 163 514 272 499 217 b 257 44 409 83 333 44 b 50 163 181 44 103 83 b 0 347 14 217 0 272 b 40 513 0 413 12 464 b 236 648 87 591 155 638 m 277 614 b 253 616 273 616 261 616 b 242 616 247 616 243 616 b 170 499 193 609 181 589 b 159 348 163 446 159 398 b 166 222 159 308 161 266 b 201 91 174 138 183 106 b 257 76 215 81 235 76 b 311 91 277 76 299 81 b 347 222 330 106 338 138 b 353 348 352 266 353 308 b 344 499 353 398 351 446 b 277 614 333 587 322 606 m 257 -1 l 258 -1 l 255 -1 l 257 -1 m 257 673 l 258 673 l 255 673 l 257 673 '
    },
    'timeSig1': {
      'x_min': -1.359375,
      'x_max': 344.359375,
      'ha': 351,
      'o': 'm 126 637 l 129 638 l 198 638 l 266 638 l 269 635 b 274 631 272 634 273 632 l 277 627 l 277 395 b 279 156 277 230 277 161 b 329 88 281 123 295 106 b 344 69 341 81 344 79 b 337 55 344 62 343 59 l 333 54 l 197 54 l 61 54 l 58 55 b 50 69 53 59 50 62 b 65 88 50 79 53 81 b 80 97 72 91 74 93 b 117 156 103 113 112 129 b 117 345 117 161 117 222 l 117 528 l 100 503 l 38 406 b 14 383 24 384 23 383 b -1 398 5 383 -1 390 b 4 415 -1 403 1 409 b 16 437 5 416 10 426 l 72 539 l 100 596 b 121 632 119 631 119 631 b 126 637 122 634 125 635 m 171 -1 l 172 -1 l 170 -1 l 171 -1 m 171 673 l 172 673 l 170 673 l 171 673 '
    },
    'timeSig2': {
      'x_min': -1.359375,
      'x_max': 458.6875,
      'ha': 468,
      'o': 'm 197 648 b 216 648 201 648 208 648 b 258 646 232 648 253 648 b 419 546 333 637 393 599 b 432 489 428 528 432 509 b 356 342 432 440 405 384 b 235 278 322 313 288 295 b 69 170 166 256 107 217 b 69 169 69 170 69 169 b 69 169 69 169 69 169 b 74 173 69 169 72 170 b 209 222 112 204 163 222 b 310 195 247 222 274 215 b 371 179 332 184 352 179 b 396 181 379 179 387 179 b 428 202 409 184 423 194 b 442 212 431 209 436 212 b 458 197 450 212 458 206 b 441 148 458 190 449 165 b 299 44 409 84 353 44 b 288 45 295 44 292 44 b 250 61 274 45 268 49 b 122 99 212 86 164 99 b 73 91 104 99 88 97 b 28 63 53 84 34 72 b 14 54 25 56 20 54 b 1 62 9 54 4 56 l -1 65 l -1 79 b 0 99 -1 91 0 95 b 2 113 1 102 2 108 b 164 309 20 197 81 272 b 285 470 232 341 277 398 b 287 487 287 476 287 481 b 171 595 287 551 239 595 b 155 595 166 595 160 595 b 142 592 145 594 142 594 b 145 589 142 592 142 591 b 179 527 168 576 179 551 b 132 455 179 496 163 467 b 104 451 122 452 112 451 b 27 530 62 451 27 487 b 29 555 27 538 27 546 b 197 648 44 601 115 639 m 228 -1 l 230 -1 l 227 -1 l 228 -1 m 228 673 l 230 673 l 227 673 l 228 673 '
    },
    'timeSig3': {
      'x_min': -1.359375,
      'x_max': 409.6875,
      'ha': 418,
      'o': 'm 174 648 b 191 648 176 648 183 648 b 225 648 204 648 220 648 b 402 523 317 638 389 588 b 404 503 404 517 404 510 b 402 484 404 495 404 488 b 264 373 389 437 334 394 b 257 370 259 371 257 371 b 257 370 257 370 257 370 b 264 369 258 370 261 369 b 409 202 359 334 409 267 b 318 72 409 152 381 104 b 200 43 281 52 240 43 b 23 113 134 43 69 68 b 0 169 6 129 0 149 b 77 249 0 210 29 249 l 77 249 b 152 174 125 249 152 212 b 103 102 152 145 137 116 b 103 102 103 102 103 102 b 147 94 103 101 132 95 b 153 94 149 94 151 94 b 265 206 219 94 265 141 b 264 226 265 213 265 219 b 147 355 253 299 204 353 b 126 371 133 356 126 362 b 147 388 126 383 132 388 b 254 474 196 391 238 424 b 259 502 258 484 259 494 b 182 592 259 544 228 582 b 156 595 175 595 166 595 b 115 592 142 595 129 594 l 111 591 l 115 588 b 152 524 141 574 152 549 b 92 449 152 491 130 458 b 76 448 87 448 81 448 b -1 530 32 448 -1 488 b 20 581 -1 548 5 566 b 174 648 55 619 108 641 m 204 -1 l 205 -1 l 202 -1 l 204 -1 m 204 673 l 205 673 l 202 673 l 204 673 '
    },
    'timeSig4': {
      'x_min': 0,
      'x_max': 468.21875,
      'ha': 478,
      'o': 'm 174 637 b 232 638 175 638 189 638 b 277 638 245 638 259 638 l 378 638 l 381 635 b 389 623 386 632 389 627 b 382 609 389 617 386 613 b 366 589 381 606 372 598 l 313 528 l 245 451 l 209 410 l 155 348 l 84 267 b 59 240 72 252 59 240 b 59 240 59 240 59 240 b 151 238 59 238 68 238 l 242 238 l 242 303 b 243 371 242 369 242 370 b 289 426 245 374 254 385 l 303 441 l 317 456 l 338 483 l 360 506 l 371 520 b 386 527 375 526 381 527 b 400 519 392 527 397 524 b 401 440 401 516 401 514 b 401 377 401 423 401 402 l 401 238 l 426 238 b 453 237 449 238 450 238 b 465 217 461 234 465 226 b 460 202 465 212 464 206 b 426 197 454 197 453 197 l 401 197 l 401 180 b 451 88 402 129 412 109 b 468 69 465 81 468 79 b 461 55 468 62 466 59 l 458 54 l 321 54 l 185 54 l 182 55 b 175 69 176 59 175 62 b 191 88 175 79 176 81 b 240 180 230 109 240 129 l 240 197 l 125 197 b 73 195 104 195 87 195 b 8 197 10 195 9 197 b 0 212 2 199 0 205 b 0 212 0 212 0 212 b 20 242 0 219 0 219 b 163 610 104 344 163 492 b 174 637 163 628 166 634 m 234 -1 l 235 -1 l 232 -1 l 234 -1 m 234 673 l 235 673 l 232 673 l 234 673 '
    },
    'timeSig5': {
      'x_min': 0,
      'x_max': 409.6875,
      'ha': 418,
      'o': 'm 47 637 b 53 638 49 638 50 638 b 69 634 55 638 61 637 b 210 610 114 619 161 610 b 363 634 259 610 311 619 b 382 638 372 637 378 638 b 392 634 386 638 389 637 b 397 623 396 630 397 627 b 393 610 397 620 396 616 b 298 505 368 552 338 520 b 212 494 277 498 246 494 b 65 517 163 494 106 502 b 61 517 62 517 61 517 b 61 517 61 517 61 517 b 51 408 61 517 51 412 b 51 408 51 408 51 408 b 51 408 51 408 51 408 b 61 412 53 408 55 409 b 125 434 80 421 103 430 b 185 441 145 440 166 441 b 409 244 310 441 409 353 b 401 191 409 227 406 209 b 197 43 375 105 287 43 b 159 47 183 43 171 44 b 23 123 112 56 61 86 b 0 180 6 140 0 159 b 76 260 0 220 31 260 b 92 259 81 260 87 259 b 152 183 132 251 152 216 b 100 112 152 152 134 122 b 95 111 98 112 95 111 b 95 111 95 111 95 111 b 129 98 95 109 119 101 b 148 97 136 97 141 97 b 264 235 206 97 261 158 b 265 248 265 240 265 244 b 210 398 265 312 243 373 b 179 408 201 406 194 408 b 174 408 178 408 176 408 b 53 369 130 408 88 394 b 34 359 39 359 38 359 b 17 374 24 359 17 365 b 39 628 17 384 38 625 b 47 637 40 631 43 635 m 204 -1 l 205 -1 l 202 -1 l 204 -1 m 204 673 l 205 673 l 202 673 l 204 673 '
    },
    'timeSig6': {
      'x_min': 0,
      'x_max': 475.03125,
      'ha': 485,
      'o': 'm 255 648 b 274 648 259 648 266 648 b 314 646 288 648 307 648 b 450 555 374 637 438 594 b 454 530 453 546 454 538 b 375 451 454 485 416 451 b 328 467 359 451 343 455 b 300 526 310 483 300 503 b 352 598 300 557 319 589 b 356 599 355 598 356 599 b 352 602 356 599 355 601 b 288 616 330 612 308 616 b 210 584 257 616 230 605 b 164 433 189 559 174 508 b 160 374 163 415 160 381 b 160 374 160 374 160 374 b 160 374 160 374 160 374 b 168 377 160 374 164 376 b 258 395 200 390 228 395 b 366 367 294 395 328 387 b 475 223 436 333 475 283 b 472 197 475 215 473 206 b 349 65 462 141 419 95 b 259 43 317 51 288 43 b 167 69 230 43 200 52 b 4 290 80 113 20 195 b 0 349 1 309 0 328 b 20 467 0 391 6 433 b 255 648 58 563 155 637 m 269 363 b 257 363 265 363 261 363 b 210 345 236 363 220 356 b 186 226 196 324 186 272 b 187 198 186 216 186 206 b 213 95 191 151 202 112 b 257 76 221 83 238 76 b 270 77 261 76 266 76 b 321 156 299 81 310 99 b 329 229 326 183 329 206 b 321 301 329 252 326 274 b 269 363 311 342 298 359 m 236 -1 l 238 -1 l 235 -1 l 236 -1 m 236 673 l 238 673 l 235 673 l 236 673 '
    },
    'timeSig7': {
      'x_min': 0,
      'x_max': 442.359375,
      'ha': 451,
      'o': 'm 147 648 b 166 649 153 649 160 649 b 313 598 217 649 273 630 b 340 587 323 588 328 587 l 341 587 b 412 628 367 587 390 601 b 427 638 416 635 421 638 b 439 632 431 638 435 637 b 442 623 441 630 442 628 b 430 569 442 616 439 603 b 352 369 408 492 377 410 b 300 259 325 324 313 298 b 273 84 283 205 273 140 b 265 55 273 65 272 59 l 261 54 l 181 54 l 99 54 l 96 55 b 91 61 95 56 92 59 l 89 63 l 89 77 b 147 263 89 133 111 202 b 261 401 176 313 212 355 b 378 541 315 449 349 489 l 382 548 l 375 544 b 240 495 333 512 285 495 b 129 535 198 495 160 509 b 84 560 108 552 95 560 b 76 559 81 560 78 560 b 31 487 59 555 43 530 b 14 470 27 473 24 470 b 1 477 8 470 4 471 l 0 480 l 0 553 l 0 627 l 1 630 b 16 638 4 635 9 638 b 23 635 17 638 20 637 b 49 626 36 626 39 626 b 96 638 59 626 80 630 b 104 639 99 638 102 639 b 117 644 107 641 112 642 b 147 648 125 645 137 648 m 220 -1 l 221 -1 l 219 -1 l 220 -1 m 220 673 l 221 673 l 219 673 l 220 673 '
    },
    'timeSig8': {
      'x_min': 0,
      'x_max': 488.640625,
      'ha': 499,
      'o': 'm 217 648 b 245 649 225 648 235 649 b 453 516 343 649 430 595 b 458 478 455 503 458 491 b 412 370 458 440 441 398 b 411 369 412 369 411 369 b 415 365 411 367 412 367 b 488 231 462 331 488 281 b 472 165 488 208 483 186 b 243 43 434 86 338 43 b 63 104 178 43 112 62 b 0 233 20 140 0 186 b 73 365 0 283 24 331 l 77 369 l 72 374 b 29 476 42 406 29 441 b 217 648 29 557 103 635 m 258 605 b 242 606 253 605 247 606 b 157 552 198 606 157 580 b 160 541 157 548 159 544 b 319 413 176 503 242 452 l 337 403 l 338 406 b 359 476 352 428 359 452 b 258 605 359 537 318 595 m 138 326 b 130 330 134 328 130 330 b 130 330 130 330 130 330 b 107 305 127 330 112 313 b 84 231 91 281 84 256 b 243 86 84 156 151 86 b 249 87 245 86 246 87 b 347 156 303 88 347 120 b 344 172 347 162 345 167 b 156 319 325 227 257 281 b 138 326 151 322 144 324 m 243 -1 l 245 -1 l 242 -1 l 243 -1 m 243 673 l 245 673 l 242 673 l 243 673 '
    },
    'timeSig9': {
      'x_min': 0,
      'x_max': 475.03125,
      'ha': 485,
      'o': 'm 191 646 b 212 649 198 648 205 649 b 255 644 227 649 243 646 b 458 448 348 616 428 539 b 475 342 469 415 475 378 b 460 244 475 308 469 274 b 193 44 421 124 303 44 b 91 69 157 44 122 51 b 19 161 43 97 19 126 b 21 181 19 167 20 174 b 98 241 32 220 65 241 b 170 186 129 241 160 223 b 172 166 171 179 172 173 b 121 94 172 134 152 102 b 117 93 118 94 117 93 b 121 90 117 93 118 91 b 185 76 142 80 164 76 b 270 119 220 76 251 91 b 308 259 287 145 300 194 b 313 317 310 277 313 310 b 313 317 313 317 313 317 b 313 317 313 317 313 317 b 304 315 313 317 308 316 b 216 295 273 302 245 295 b 145 308 193 295 170 299 b 19 398 88 327 42 360 b 0 469 5 420 0 444 b 24 551 0 496 8 526 b 191 646 54 596 125 637 m 227 614 b 215 616 224 616 220 616 b 202 614 210 616 206 616 b 152 535 174 610 163 592 b 144 463 147 509 144 485 b 152 391 144 440 147 417 b 216 328 163 344 179 328 b 280 391 253 328 269 344 b 288 463 285 417 288 440 b 280 535 288 485 285 509 b 227 614 269 594 258 610 m 236 -1 l 238 -1 l 235 -1 l 236 -1 m 236 673 l 238 673 l 235 673 l 236 673 '
    },
    'timeSigCommon': {
      'x_min': -1.359375,
      'x_max': 556.6875,
      'ha': 568,
      'o': 'm 294 322 b 318 323 299 322 308 323 b 360 320 334 323 352 322 b 526 217 430 310 490 273 b 543 166 537 202 543 184 b 447 70 543 117 503 70 b 445 70 447 70 446 70 b 359 159 394 72 359 113 b 368 201 359 173 362 187 b 442 245 382 229 412 245 b 455 244 446 245 451 245 b 460 244 458 244 460 244 b 460 244 460 244 460 244 b 454 248 460 244 458 245 b 325 291 417 276 372 291 b 285 287 313 291 299 290 b 144 -2 183 269 144 190 b 281 -290 144 -208 179 -280 b 304 -291 289 -291 298 -291 b 524 -105 412 -291 506 -212 b 541 -84 526 -88 530 -84 b 556 -101 551 -84 556 -90 b 549 -138 556 -111 553 -122 b 334 -322 521 -237 435 -310 b 302 -324 323 -323 313 -324 b 13 -101 172 -324 54 -234 b -1 -1 4 -68 -1 -34 b 294 322 -1 161 121 303 '
    },
    'timeSigCutCommon': {
      'x_min': 0,
      'x_max': 556.6875,
      'ha': 568,
      'o': 'm 289 545 b 298 546 292 545 295 546 b 318 533 306 546 315 541 b 319 428 319 530 319 528 l 319 327 l 334 327 b 526 223 412 326 485 285 b 543 172 537 206 543 190 b 447 76 543 122 503 76 b 445 76 446 76 446 76 b 359 165 394 77 359 119 b 368 205 359 179 362 192 b 441 251 382 233 412 251 b 455 249 446 251 451 251 b 460 248 458 249 460 248 b 460 248 460 248 460 248 b 454 254 460 249 458 251 b 334 295 419 280 378 294 l 319 295 l 319 4 l 319 -287 l 321 -285 b 328 -285 322 -285 325 -285 b 524 -99 424 -277 507 -198 b 541 -79 526 -84 530 -79 b 556 -97 551 -79 556 -84 b 548 -133 556 -105 553 -117 b 334 -317 521 -233 434 -306 b 322 -319 329 -317 323 -317 l 319 -319 l 319 -424 b 319 -471 319 -444 319 -459 b 313 -541 319 -544 318 -535 b 298 -548 308 -545 303 -548 b 279 -534 289 -548 281 -542 b 277 -424 277 -531 277 -530 l 277 -317 l 273 -317 b 13 -95 153 -305 51 -217 b 0 2 4 -62 0 -29 b 182 295 0 126 66 238 b 274 324 210 309 249 320 l 277 324 l 277 427 b 279 533 277 528 277 530 b 289 545 281 538 285 542 m 277 2 b 277 291 277 161 277 291 b 268 288 277 291 273 290 b 144 1 179 265 144 184 b 276 -284 144 -199 175 -267 l 277 -285 l 277 2 '
    },
    'noteheadDoubleWhole': {
      'x_min': 0,
      'x_max': 902.421875,
      'ha': 921,
      'o': 'm 17 240 b 24 241 19 241 21 241 b 32 240 28 241 31 241 b 46 229 38 238 43 234 b 50 88 50 223 50 237 b 50 -1 50 63 50 34 b 50 -90 50 -36 50 -65 b 46 -231 50 -238 50 -224 b 25 -242 42 -238 34 -242 b 0 -224 14 -242 4 -235 b 0 2 0 -222 0 -108 b 0 223 0 112 0 220 b 17 240 2 230 9 237 m 110 240 b 118 241 111 241 114 241 b 126 240 121 241 123 241 b 142 223 133 237 140 230 b 144 123 144 220 144 205 b 144 29 144 45 144 29 b 144 29 144 29 144 29 b 393 183 166 106 264 167 b 450 186 412 184 431 186 b 756 29 600 186 732 120 b 756 29 756 29 756 29 b 758 123 758 29 758 45 b 760 227 758 226 758 223 b 784 241 766 237 774 241 b 804 229 792 241 800 237 b 809 88 808 223 809 237 l 809 -1 l 809 -90 b 804 -231 809 -238 808 -224 b 784 -242 800 -238 792 -242 b 762 -231 775 -242 766 -238 b 758 -124 756 -224 758 -231 b 756 -30 758 -47 758 -30 b 756 -30 756 -30 756 -30 b 509 -184 736 -108 637 -169 b 450 -187 488 -187 469 -187 b 144 -30 300 -187 168 -122 b 144 -30 144 -30 144 -30 b 144 -124 144 -30 144 -47 b 140 -231 144 -231 144 -224 b 118 -242 134 -238 126 -242 b 92 -224 107 -242 96 -235 b 92 2 92 -222 92 -108 b 92 223 92 112 92 220 b 110 240 95 230 102 237 m 432 161 b 413 162 426 162 420 162 b 313 41 351 162 313 109 b 347 -73 313 5 323 -34 b 487 -163 385 -133 439 -163 b 578 -97 526 -163 562 -142 b 588 -43 585 -80 588 -62 b 432 161 588 47 518 147 m 868 240 b 876 241 869 241 872 241 b 884 240 879 241 882 241 b 898 229 890 238 894 234 b 902 88 902 223 902 237 l 902 -1 l 902 -90 b 898 -231 902 -238 902 -224 b 876 -242 892 -238 884 -242 b 852 -224 865 -242 854 -235 b 850 2 850 -222 850 -108 b 852 223 850 112 850 220 b 868 240 853 230 860 237 '
    },
    'noteheadWhole': {
      'x_min': 0,
      'x_max': 619.3125,
      'ha': 632,
      'o': 'm 274 184 b 307 186 285 186 296 186 b 616 22 465 186 597 116 b 619 -1 617 13 619 5 b 308 -187 619 -104 483 -187 b 0 -1 133 -187 0 -102 b 5 36 0 11 1 23 b 274 184 29 115 141 176 m 289 161 b 272 162 284 162 277 162 b 171 41 209 162 171 108 b 205 -73 171 5 182 -34 b 345 -163 243 -133 298 -163 b 436 -98 385 -163 420 -142 b 446 -43 443 -80 446 -62 b 289 161 446 47 377 147 '
    },
    'noteheadHalf': {
      'x_min': 0,
      'x_max': 428.75,
      'ha': 438,
      'o': 'm 262 186 b 273 186 266 186 272 186 b 274 186 273 186 274 186 b 285 186 274 186 280 186 b 428 48 375 181 428 122 b 386 -68 428 12 416 -29 b 155 -187 329 -145 236 -187 b 12 -111 92 -187 38 -162 b 0 -51 4 -91 0 -72 b 262 186 0 58 122 179 m 366 131 b 352 134 362 133 357 134 b 219 81 321 134 269 115 b 47 -111 126 23 50 -62 b 47 -112 47 -111 47 -112 b 77 -136 47 -129 58 -136 b 264 -45 118 -136 194 -101 b 382 109 336 12 382 76 b 366 131 382 120 377 129 '
    },
    'noteheadBlack': {
      'x_min': 0,
      'x_max': 428.75,
      'ha': 438,
      'o': 'm 262 186 b 273 186 266 186 272 186 b 274 186 273 186 274 186 b 285 186 274 186 280 186 b 428 48 375 181 428 122 b 386 -68 428 12 416 -29 b 155 -187 329 -145 236 -187 b 12 -111 92 -187 38 -162 b 0 -51 4 -91 0 -72 b 262 186 0 58 122 179 '
    },
    'noteheadXWhole': {
      'x_min': 0,
      'x_max': 598.890625,
      'ha': 611,
      'o': 'm 62 181 b 77 183 66 183 72 183 b 91 181 83 183 88 183 b 202 131 100 180 106 177 l 299 87 l 394 131 b 517 183 499 181 502 183 b 519 183 517 183 518 183 b 598 104 567 183 598 144 b 577 49 598 84 592 65 b 518 15 567 38 563 37 b 484 0 499 6 484 0 b 518 -16 484 -1 499 -8 b 577 -51 563 -38 567 -40 b 598 -105 592 -66 598 -86 b 519 -184 598 -145 567 -184 b 517 -184 518 -184 517 -184 b 394 -133 502 -184 499 -183 l 299 -88 l 202 -133 b 81 -184 99 -183 95 -184 b 77 -184 80 -184 78 -184 b 0 -105 29 -184 0 -145 b 20 -51 0 -86 5 -66 b 80 -16 29 -40 34 -38 b 114 -1 98 -8 114 -1 b 80 15 114 0 98 6 b 20 49 34 37 29 38 b 0 104 6 65 0 84 b 62 181 0 140 23 174 m 88 134 b 74 136 85 134 80 136 b 68 134 72 136 69 136 b 46 104 54 130 46 117 b 55 81 46 95 49 88 b 149 34 59 76 53 80 b 224 -1 190 15 224 0 b 144 -38 224 -1 187 -18 b 54 -84 59 -79 58 -79 b 46 -105 49 -90 46 -98 b 76 -137 46 -122 58 -137 b 78 -137 77 -137 77 -137 b 194 -86 87 -137 76 -141 b 298 -36 250 -58 298 -36 b 298 -36 298 -36 298 -36 b 402 -84 299 -36 345 -58 b 518 -137 522 -141 510 -137 b 521 -137 519 -137 519 -137 b 551 -105 539 -137 551 -122 b 541 -83 551 -98 548 -90 b 447 -36 537 -77 544 -81 b 374 -1 406 -16 374 -1 b 447 34 374 0 406 15 b 541 81 544 80 537 76 b 551 104 548 88 551 97 b 521 136 551 120 539 136 b 518 136 519 136 519 136 b 517 136 518 136 517 136 l 517 136 b 402 83 511 136 511 136 b 298 34 345 56 299 34 b 298 34 298 34 298 34 b 194 84 298 34 250 56 b 88 134 137 111 89 133 '
    },
    'noteheadXHalf': {
      'x_min': 0,
      'x_max': 406.96875,
      'ha': 415,
      'o': 'm 55 181 b 70 183 61 183 66 183 b 111 170 85 183 99 179 b 160 130 115 167 137 149 l 202 95 l 245 130 b 319 181 299 176 302 179 b 334 183 325 183 330 183 b 406 109 375 183 406 148 b 401 81 406 99 405 91 b 348 24 394 65 390 59 b 318 -1 332 11 318 0 b 348 -26 318 -1 332 -12 b 401 -83 390 -61 394 -66 b 406 -111 405 -93 406 -101 b 334 -184 406 -149 375 -184 b 319 -183 330 -184 325 -184 b 245 -131 302 -180 299 -177 l 202 -97 l 160 -131 b 85 -183 107 -177 103 -180 b 70 -184 80 -184 76 -184 b 0 -111 31 -184 0 -149 b 4 -83 0 -101 1 -93 b 58 -26 10 -66 16 -61 b 88 -1 74 -12 88 -1 b 58 24 88 0 74 11 b 10 69 23 54 17 59 b 0 109 2 81 0 95 b 55 181 0 142 21 173 m 83 133 b 72 136 78 136 76 136 b 57 131 66 136 61 134 b 46 109 49 126 46 117 b 50 93 46 104 47 98 b 107 45 51 91 77 70 b 160 0 137 20 160 0 b 107 -47 160 -1 137 -22 b 50 -94 77 -72 51 -93 b 46 -111 47 -99 46 -105 b 59 -134 46 -120 50 -130 b 72 -137 62 -136 68 -137 b 83 -136 76 -137 80 -136 b 144 -84 84 -134 107 -116 b 202 -36 176 -58 202 -36 b 261 -84 202 -36 230 -58 b 323 -136 299 -116 321 -134 b 334 -137 326 -136 330 -137 b 345 -134 338 -137 343 -136 b 360 -111 355 -130 360 -120 b 355 -94 360 -105 359 -99 b 299 -47 353 -93 329 -72 b 245 0 269 -22 245 -1 b 299 45 245 0 269 20 b 355 93 329 70 353 91 b 360 109 359 98 360 104 b 345 133 360 119 355 129 b 334 136 343 134 338 136 b 323 134 330 136 326 134 b 261 83 321 133 299 115 b 202 34 230 56 202 34 b 144 83 202 34 176 56 b 83 133 106 115 84 133 '
    },
    'noteheadXBlack': {
      'x_min': 0,
      'x_max': 406.96875,
      'ha': 415,
      'o': 'm 21 183 b 28 183 24 183 25 183 b 42 181 34 183 39 183 b 127 108 47 179 47 179 b 202 41 168 72 202 41 b 279 108 204 41 238 72 b 357 177 321 145 356 176 b 375 183 363 181 370 183 b 406 151 392 183 406 169 b 404 137 406 147 405 141 b 322 62 401 131 398 129 b 251 0 284 27 251 0 b 322 -63 251 -1 284 -29 b 404 -138 398 -130 401 -133 b 406 -152 405 -142 406 -148 b 375 -184 406 -170 392 -184 b 357 -179 370 -184 363 -183 b 279 -109 356 -177 321 -147 b 202 -43 238 -73 204 -43 b 127 -109 202 -43 168 -73 b 49 -179 85 -147 50 -177 b 31 -184 43 -183 36 -184 b 0 -152 13 -184 0 -170 b 2 -138 0 -148 0 -142 b 83 -63 5 -133 8 -130 b 155 0 122 -29 155 -1 b 83 62 155 0 122 27 b 8 129 43 97 10 127 b 0 151 2 136 0 144 b 21 183 0 165 8 177 '
    },
    'noteheadCircleX': {
      'x_min': 0,
      'x_max': 484.5625,
      'ha': 494,
      'o': 'm 228 245 b 239 247 234 247 239 247 b 243 247 240 247 242 247 b 303 238 257 247 287 242 b 484 -2 417 208 484 104 b 412 -177 484 -65 461 -127 b 243 -248 363 -226 303 -248 b 6 -63 138 -248 36 -180 b 0 -1 1 -41 0 -20 b 228 245 0 127 98 240 m 255 181 b 240 183 247 183 245 183 b 232 181 238 183 235 183 b 142 152 200 180 168 170 l 138 149 l 190 97 l 242 44 l 294 97 l 345 149 l 340 152 b 255 181 315 169 284 180 m 147 -54 l 197 -1 l 147 51 l 95 104 l 91 99 b 62 -1 72 70 62 34 b 66 -43 62 -15 63 -29 b 91 -101 72 -63 80 -84 l 95 -106 l 147 -54 m 393 99 b 389 104 390 102 389 104 b 337 51 389 104 366 80 l 285 -1 l 337 -54 l 389 -106 l 393 -101 b 421 -1 412 -72 421 -36 b 393 99 421 34 412 69 m 294 -98 b 242 -45 265 -69 242 -45 b 190 -98 242 -45 219 -69 l 138 -151 l 142 -154 b 242 -184 172 -174 206 -184 b 340 -154 276 -184 311 -174 l 345 -151 l 294 -98 '
    },
    'noteheadTriangleUpWhole': {
      'x_min': 0,
      'x_max': 630.203125,
      'ha': 643,
      'o': 'm 308 204 b 314 205 310 205 313 205 b 326 201 319 205 323 204 b 355 154 328 199 338 180 b 401 83 362 142 392 95 l 409 72 b 431 41 412 66 424 49 b 619 -174 498 -51 570 -134 b 630 -192 626 -180 630 -186 b 626 -202 630 -195 628 -199 b 616 -206 623 -205 620 -206 b 552 -188 608 -206 592 -202 b 310 -155 488 -169 392 -155 b 268 -156 295 -155 281 -155 b 77 -188 197 -161 126 -173 b 13 -206 35 -202 20 -206 b 9 -206 12 -206 10 -206 b 0 -191 2 -202 0 -197 b 8 -176 0 -186 2 -180 b 204 49 58 -136 138 -43 l 220 72 l 227 83 b 295 188 245 108 281 166 b 308 204 299 197 304 202 m 315 147 b 314 147 315 147 314 147 b 314 147 314 147 314 147 b 306 129 314 145 310 138 l 296 105 b 281 72 292 97 284 77 l 274 56 b 181 -123 247 -4 212 -72 l 174 -134 l 176 -133 b 314 -123 215 -127 272 -123 b 451 -133 356 -123 413 -127 l 454 -134 l 449 -123 b 353 56 417 -72 381 -4 l 347 72 b 332 105 344 77 336 97 l 322 129 b 315 147 318 138 315 145 '
    },
    'noteheadTriangleUpHalf': {
      'x_min': 0,
      'x_max': 438.28125,
      'ha': 447,
      'o': 'm 212 205 b 219 205 213 205 216 205 b 239 183 228 205 231 204 b 421 -163 298 40 363 -83 b 438 -191 434 -180 438 -186 b 436 -197 438 -192 438 -195 b 424 -206 434 -204 431 -206 b 406 -201 420 -206 415 -205 b 216 -156 347 -172 281 -156 b 23 -205 148 -156 80 -173 b 14 -206 20 -206 17 -206 b 0 -191 6 -206 0 -201 b 6 -176 0 -187 1 -183 b 202 192 63 -104 142 45 b 212 205 205 199 208 202 m 264 48 l 249 81 l 243 94 l 242 91 b 89 -126 208 36 137 -66 b 81 -138 85 -133 81 -138 b 81 -138 81 -138 81 -138 b 81 -138 81 -138 81 -138 b 95 -133 81 -138 87 -136 b 280 -94 156 -108 221 -94 b 334 -98 299 -94 317 -95 b 343 -99 338 -99 343 -99 b 343 -99 343 -99 343 -99 b 338 -94 343 -99 341 -97 b 264 48 318 -58 287 1 '
    },
    'noteheadTriangleUpBlack': {
      'x_min': -1.359375,
      'x_max': 436.921875,
      'ha': 446,
      'o': 'm 213 205 b 217 205 215 205 216 205 b 234 194 224 205 234 199 b 236 187 234 194 235 190 l 245 167 l 261 129 l 270 106 b 355 -61 294 54 329 -13 b 420 -163 381 -105 402 -138 b 436 -188 435 -184 436 -184 b 436 -191 436 -190 436 -190 b 421 -206 436 -201 431 -206 l 421 -206 l 416 -206 l 405 -201 b 217 -158 347 -172 283 -158 b 31 -201 153 -158 88 -172 l 20 -206 l 14 -206 l 14 -206 b 0 -191 5 -206 0 -201 b -1 -188 0 -190 -1 -190 b 14 -163 -1 -186 0 -184 b 95 -34 36 -136 72 -77 b 166 106 119 8 148 68 l 175 129 l 183 148 l 200 188 b 213 205 205 199 208 202 '
    },
    'noteheadDiamondWhole': {
      'x_min': 0,
      'x_max': 627.46875,
      'ha': 640,
      'o': 'm 306 190 b 314 191 308 191 311 191 b 326 184 318 191 322 190 l 336 173 b 510 52 377 127 442 80 b 515 49 513 51 515 49 b 611 16 537 40 579 24 b 627 0 624 13 627 9 b 607 -18 627 -11 624 -13 b 330 -181 490 -49 389 -109 b 314 -192 323 -190 319 -192 b 306 -191 311 -192 308 -192 b 294 -177 302 -188 302 -188 b 257 -140 287 -170 265 -148 b 19 -18 193 -84 114 -44 b 0 0 2 -13 0 -11 b 16 16 0 9 2 13 b 110 49 47 24 89 40 b 117 52 111 49 114 51 b 145 65 126 56 130 58 b 281 163 200 93 245 124 b 300 186 288 170 291 174 b 306 190 300 187 303 188 m 317 137 b 313 142 315 141 314 142 b 308 137 313 142 311 141 b 161 4 276 84 220 33 b 155 0 159 1 155 0 b 163 -4 155 0 159 -2 b 308 -138 220 -34 276 -84 b 313 -142 311 -141 313 -142 b 317 -138 314 -142 315 -141 b 464 -4 351 -84 406 -34 b 470 0 468 -2 470 0 b 464 4 470 0 468 1 b 317 137 406 33 351 84 '
    },
    'noteheadDiamondHalf': {
      'x_min': 0,
      'x_max': 438.28125,
      'ha': 447,
      'o': 'm 212 190 b 219 191 213 191 216 191 b 236 176 225 191 228 190 b 419 18 277 105 341 49 b 436 5 431 13 434 11 b 438 -1 438 4 438 1 b 424 -16 438 -8 432 -13 b 356 -49 409 -20 379 -36 b 234 -180 306 -83 258 -133 b 219 -192 230 -188 224 -192 b 200 -176 213 -192 206 -187 b 9 -15 157 -102 89 -45 b 0 0 2 -12 0 -6 b 16 18 0 9 2 12 b 200 176 93 48 159 104 b 212 190 205 186 208 188 m 239 113 b 236 117 238 116 238 117 b 230 108 235 117 234 115 b 92 -15 196 58 140 8 b 88 -18 91 -16 88 -18 b 92 -20 88 -18 91 -19 b 198 -116 130 -43 166 -74 b 200 -117 200 -117 200 -117 b 201 -117 200 -117 201 -117 b 264 -43 212 -98 242 -62 b 345 15 288 -19 321 4 b 348 18 347 16 348 16 b 344 20 348 18 347 19 b 239 113 307 41 266 79 '
    },
    'noteheadDiamondBlack': {
      'x_min': 0,
      'x_max': 432.828125,
      'ha': 442,
      'o': 'm 209 186 b 213 187 210 187 212 187 b 216 187 215 187 216 187 b 224 174 216 186 220 180 b 420 -1 269 105 338 43 b 432 -12 431 -8 432 -9 b 421 -23 432 -15 432 -16 b 228 -180 345 -70 264 -137 b 219 -188 221 -188 221 -188 l 219 -188 b 208 -177 215 -188 215 -188 b 10 1 163 -106 93 -44 b 0 11 0 6 0 8 b 10 22 0 13 0 15 b 202 179 87 69 167 136 b 209 186 206 183 209 186 '
    },
    'augmentationDot': {
      'x_min': 0,
      'x_max': 133.390625,
      'ha': 136,
      'o': 'm 54 66 b 65 68 58 68 61 68 b 122 37 88 68 110 56 b 133 -1 130 26 133 12 b 104 -58 133 -23 123 -44 b 66 -69 92 -65 78 -69 b 10 -38 44 -69 23 -58 b 0 -1 2 -27 0 -13 b 54 66 0 30 20 61 '
    },
    'tremolo1': {
      'x_min': -206.890625,
      'x_max': 428.75,
      'ha': 438,
      'o': 'm 389 -351 b 394 -351 390 -351 393 -351 b 428 -385 413 -351 428 -367 b 428 -394 428 -388 428 -391 b 394 -428 426 -406 421 -410 l 332 -473 l 269 -516 l 205 -560 l 141 -603 l 77 -648 l 13 -692 l -50 -737 l -114 -780 l -145 -802 b -171 -813 -157 -810 -163 -813 b -175 -813 -172 -813 -174 -813 b -206 -777 -194 -811 -206 -795 b -202 -760 -206 -771 -205 -766 b -87 -675 -197 -752 -206 -757 l -34 -639 l 83 -557 l 145 -514 l 209 -470 l 272 -427 b 389 -351 375 -356 381 -352 '
    },
    'flag8thUp': {
      'x_min': -24.5,
      'x_max': 317.140625,
      'ha': 324,
      'o': 'm -24 -161 l -24 -5 l -20 -5 b 0 -24 -9 -5 -2 -12 b 171 -315 21 -124 84 -233 b 317 -660 268 -406 317 -531 b 187 -1014 317 -782 274 -909 b 161 -1034 172 -1034 171 -1034 b 141 -1013 149 -1034 141 -1025 b 152 -991 141 -1004 142 -1002 b 266 -682 228 -899 266 -788 b 174 -430 266 -588 236 -498 b -23 -317 136 -388 66 -348 b -24 -161 -23 -316 -24 -285 '
    },
    'flag8thDown': {
      'x_min': -21.78125,
      'x_max': 367.5,
      'ha': 375,
      'o': 'm 230 1031 b 238 1032 232 1032 235 1032 b 259 1014 245 1032 251 1027 b 367 662 330 906 367 782 b 364 602 367 641 367 621 b 232 317 352 488 304 384 b 57 120 155 245 103 187 b -1 18 31 84 6 40 b -19 4 -4 11 -12 4 l -21 4 l -21 159 l -21 315 l -16 315 b 96 335 10 315 62 324 b 315 695 227 380 315 527 b 313 738 315 709 314 724 b 224 991 304 825 273 916 b 216 1013 219 999 216 1007 b 230 1031 216 1021 220 1028 '
    },
    'flag16thUp': {
      'x_min': -24.5,
      'x_max': 317.140625,
      'ha': 324,
      'o': 'm -24 -147 l -24 -5 l -20 -5 b -1 -19 -12 -5 -4 -11 b 58 -123 6 -43 31 -86 b 196 -278 93 -173 134 -219 b 317 -570 274 -356 317 -460 b 294 -713 317 -617 308 -666 l 289 -724 l 294 -735 b 317 -873 308 -780 317 -827 b 235 -1132 317 -963 288 -1054 b 209 -1165 228 -1140 224 -1146 b 189 -1177 204 -1172 196 -1177 b 171 -1164 182 -1177 175 -1172 b 168 -1154 170 -1161 168 -1159 b 181 -1132 168 -1149 172 -1142 b 269 -891 238 -1064 269 -975 b 269 -881 269 -886 269 -884 b 262 -814 269 -857 265 -827 b 258 -800 261 -811 259 -806 b 142 -628 240 -731 198 -667 b -8 -589 112 -606 47 -589 b -20 -589 -13 -589 -19 -589 l -24 -589 l -24 -449 l -24 -308 l -20 -308 b -1 -322 -12 -308 -4 -313 b 58 -424 6 -345 31 -388 b 194 -580 93 -476 136 -523 b 259 -660 221 -606 245 -635 b 261 -663 259 -662 261 -663 b 264 -656 262 -663 262 -660 b 269 -587 268 -632 269 -610 b 264 -521 269 -566 268 -544 b 262 -512 264 -517 262 -513 b 258 -498 261 -509 259 -503 b 142 -326 240 -428 198 -365 b -8 -287 112 -303 47 -288 b -20 -287 -13 -287 -19 -287 l -24 -287 l -24 -147 '
    },
    'flag16thDown': {
      'x_min': -21.78125,
      'x_max': 362.0625,
      'ha': 369,
      'o': 'm 302 1031 b 308 1032 304 1032 307 1032 b 330 1016 318 1032 325 1027 b 362 867 351 970 362 920 b 340 738 362 824 353 780 l 336 727 l 340 717 b 362 591 355 677 362 634 b 257 323 362 496 325 401 b 204 272 243 306 227 290 b 20 56 129 206 66 133 b -1 18 12 44 0 22 b -19 4 -4 9 -12 4 l -21 4 l -21 140 l -21 276 l -12 277 b 167 333 61 288 127 309 b 319 598 262 388 319 491 b 311 664 319 620 317 642 l 310 673 l 304 664 b 204 548 279 620 250 587 b 20 333 129 483 66 409 b -1 292 12 320 0 298 b -19 280 -4 285 -12 280 l -21 280 l -21 416 l -21 552 l -12 553 b 167 609 61 564 127 585 b 319 874 264 666 319 770 b 294 992 319 914 311 954 b 288 1011 288 1004 288 1007 b 302 1031 288 1021 294 1028 '
    },
    'flag32ndUp': {
      'x_min': -24.5,
      'x_max': 315.78125,
      'ha': 322,
      'o': 'm -24 -145 l -24 -5 l -20 -5 b 1 -26 -10 -5 -6 -9 b 175 -241 31 -86 96 -166 b 314 -548 259 -323 304 -420 b 315 -589 315 -555 315 -571 b 314 -630 315 -606 315 -623 b 298 -730 311 -664 306 -699 l 295 -742 l 296 -748 b 314 -850 304 -778 311 -813 b 315 -892 315 -857 315 -874 b 314 -932 315 -909 315 -925 b 298 -1032 311 -967 306 -1002 l 295 -1045 l 296 -1050 b 314 -1153 304 -1081 311 -1115 b 315 -1193 315 -1160 315 -1177 b 314 -1235 315 -1211 315 -1228 b 217 -1526 306 -1338 270 -1444 b 201 -1533 213 -1532 208 -1533 b 182 -1522 193 -1533 185 -1529 b 179 -1514 181 -1518 179 -1517 b 189 -1489 179 -1508 182 -1501 b 266 -1217 240 -1403 266 -1308 b 262 -1156 266 -1196 265 -1177 b 110 -907 247 -1043 190 -950 b 0 -889 87 -895 50 -889 l -1 -889 l -24 -889 l -24 -749 l -24 -610 l -20 -610 b 1 -631 -10 -610 -6 -614 b 175 -846 31 -691 96 -771 b 259 -956 213 -884 236 -914 b 265 -966 262 -961 264 -966 b 265 -966 265 -966 265 -966 b 265 -953 265 -964 265 -959 b 266 -920 266 -943 266 -932 b 262 -853 266 -898 265 -873 b 110 -605 247 -741 190 -648 b 0 -587 87 -592 50 -587 l -1 -587 l -24 -587 l -24 -448 l -24 -308 l -20 -308 b 1 -328 -10 -308 -6 -312 b 175 -544 31 -388 96 -469 b 259 -655 213 -581 236 -612 b 265 -663 262 -659 264 -663 b 265 -663 265 -663 265 -663 b 265 -650 265 -663 265 -657 b 266 -617 266 -641 266 -630 b 262 -551 266 -595 265 -570 b 110 -303 247 -438 190 -345 b 0 -284 87 -290 50 -284 l -1 -284 l -24 -284 l -24 -145 '
    },
    'flag32ndDown': {
      'x_min': -21.78125,
      'x_max': 366.140625,
      'ha': 374,
      'o': 'm 276 1378 b 284 1379 279 1379 281 1379 b 306 1360 292 1379 298 1374 b 352 1247 326 1326 343 1286 b 366 1139 362 1213 366 1175 b 347 1009 366 1093 359 1049 l 344 1002 l 347 992 b 352 971 348 986 351 977 b 366 863 362 936 366 899 b 347 732 366 818 359 773 l 344 725 l 347 716 b 352 695 348 710 351 700 b 366 588 362 659 366 623 b 223 262 366 464 314 345 b 189 233 212 252 212 252 b 35 76 126 183 73 129 b -1 16 20 56 2 27 b -19 4 -4 9 -12 4 l -21 4 l -21 137 l -21 270 l -17 270 b 186 344 59 281 134 308 b 319 606 270 399 319 499 b 317 650 319 620 319 635 l 315 659 l 314 655 b 223 537 288 607 258 570 b 189 509 212 528 212 528 b 35 352 126 459 73 405 b -1 292 20 333 2 303 b -19 280 -4 285 -12 280 l -21 280 l -21 413 l -21 546 l -17 546 b 186 620 59 557 134 584 b 319 882 270 675 319 775 b 317 925 319 896 319 911 l 315 935 l 314 931 b 223 813 288 884 258 846 b 189 785 212 805 212 805 b 35 628 126 735 73 681 b -1 569 20 609 2 580 b -19 556 -4 562 -12 556 l -21 556 l -21 689 l -21 823 l -17 823 b 202 907 68 835 152 867 b 319 1157 280 968 319 1061 b 270 1338 319 1218 303 1281 b 262 1358 264 1349 262 1353 b 262 1364 262 1360 262 1363 b 276 1378 265 1371 269 1376 '
    },
    'flag64thUp': {
      'x_min': -24.5,
      'x_max': 314.421875,
      'ha': 321,
      'o': 'm -24 -145 l -24 -5 l -20 -5 b 0 -23 -9 -5 -2 -12 b 27 -87 4 -38 14 -66 b 138 -220 53 -136 88 -177 b 235 -328 179 -255 208 -288 b 314 -592 287 -409 314 -501 b 292 -732 314 -639 307 -687 l 289 -742 l 294 -756 b 314 -896 307 -802 314 -849 b 292 -1035 314 -943 307 -991 l 289 -1045 l 294 -1057 b 314 -1197 307 -1104 314 -1152 b 292 -1338 314 -1246 307 -1292 l 289 -1347 l 294 -1360 b 314 -1500 307 -1407 314 -1454 b 273 -1689 314 -1565 300 -1628 b 250 -1712 265 -1710 261 -1712 b 228 -1691 236 -1712 228 -1704 l 228 -1685 l 234 -1675 b 270 -1507 258 -1621 270 -1564 b 98 -1193 270 -1381 209 -1261 b 40 -1174 76 -1179 58 -1174 b -10 -1189 24 -1174 8 -1178 b -20 -1192 -14 -1192 -16 -1192 l -24 -1192 l -24 -1052 l -24 -913 l -20 -913 b 0 -931 -9 -913 -2 -920 b 27 -995 4 -946 14 -974 b 138 -1128 53 -1043 88 -1085 b 257 -1275 190 -1172 228 -1220 b 262 -1283 259 -1279 262 -1283 l 262 -1283 b 269 -1249 264 -1282 268 -1260 b 270 -1206 270 -1233 270 -1220 b 98 -891 270 -1075 206 -957 b 40 -871 76 -877 58 -871 b -10 -886 24 -871 8 -875 b -20 -889 -14 -889 -16 -889 l -24 -889 l -24 -749 l -24 -610 l -20 -610 b 0 -628 -9 -610 -2 -617 b 27 -692 4 -644 14 -671 b 138 -825 53 -741 88 -782 b 257 -973 190 -870 228 -917 b 262 -981 259 -977 262 -981 l 262 -981 b 269 -946 264 -979 268 -957 b 270 -903 270 -931 270 -917 b 98 -588 270 -774 206 -655 b 40 -569 76 -574 58 -569 b -10 -584 24 -569 8 -574 b -20 -587 -14 -587 -16 -587 l -24 -587 l -24 -448 l -24 -308 l -20 -308 b 0 -326 -9 -308 -2 -315 b 27 -390 4 -341 14 -369 b 138 -523 53 -438 88 -480 b 257 -670 190 -567 228 -614 b 262 -678 259 -674 262 -678 b 262 -678 262 -678 262 -678 b 269 -644 264 -677 268 -656 b 270 -601 270 -628 270 -614 b 98 -285 270 -471 206 -352 b 40 -266 76 -273 58 -266 b -10 -281 24 -266 8 -272 b -20 -284 -14 -284 -16 -284 l -24 -284 l -24 -145 '
    },
    'flag64thDown': {
      'x_min': -21.78125,
      'x_max': 367.5,
      'ha': 375,
      'o': 'm 259 1553 b 265 1553 261 1553 264 1553 b 288 1540 272 1553 277 1550 b 367 1351 340 1493 367 1424 b 336 1221 367 1308 357 1263 l 332 1211 l 333 1208 b 367 1077 356 1170 367 1124 b 336 945 367 1032 357 986 l 332 935 l 333 932 b 367 800 356 893 367 848 b 336 669 367 756 357 710 l 332 659 l 333 656 b 367 523 356 617 367 571 b 345 412 367 485 360 446 b 231 273 322 356 284 310 b -1 19 121 195 27 93 b -17 4 -4 11 -10 5 l -21 4 l -21 134 l -21 265 l -17 265 b 133 291 20 265 96 278 b 318 537 245 328 318 433 b 307 603 318 559 315 582 b 303 614 304 612 304 614 b 298 609 302 614 300 613 b 231 549 281 589 258 567 b -1 295 121 471 27 369 b -17 280 -4 287 -10 281 l -21 280 l -21 410 l -21 541 l -17 541 b 133 567 20 541 96 555 b 318 813 245 605 318 709 b 307 880 318 835 315 859 b 303 891 304 888 304 891 b 298 885 302 891 300 888 b 231 825 281 866 258 843 b -1 571 121 748 27 645 b -17 556 -4 563 -10 557 l -21 556 l -21 687 l -21 817 l -17 817 b 133 843 20 817 96 830 b 318 1089 245 881 318 985 b 307 1156 318 1111 315 1134 b 303 1167 304 1164 304 1167 b 298 1161 302 1167 300 1164 b 231 1102 281 1140 258 1120 b -1 848 121 1024 27 921 b -17 832 -4 839 -10 834 l -21 832 l -21 963 l -21 1093 l -17 1093 b 114 1113 12 1093 78 1103 b 313 1314 215 1142 289 1218 b 318 1364 317 1331 318 1347 b 255 1511 318 1422 295 1478 b 243 1532 247 1519 243 1525 b 259 1553 243 1540 250 1550 '
    },
    'flag128thUp': {
      'x_min': -24.5,
      'x_max': 313.0625,
      'ha': 319,
      'o': 'm -24 -133 l -24 -5 l -20 -5 b -1 -19 -12 -5 -4 -11 b 142 -213 13 -61 74 -144 b 258 -376 196 -269 230 -315 b 313 -605 295 -449 313 -528 b 292 -742 313 -652 306 -699 b 288 -752 289 -748 288 -752 b 288 -752 288 -752 288 -752 b 292 -764 289 -753 291 -757 b 313 -907 306 -811 313 -860 b 292 -1045 313 -954 306 -1002 b 288 -1054 289 -1050 288 -1054 b 288 -1054 288 -1054 288 -1054 b 292 -1067 289 -1054 291 -1060 b 313 -1210 306 -1113 313 -1161 b 292 -1346 313 -1257 306 -1304 b 288 -1357 289 -1353 288 -1357 b 288 -1357 288 -1357 288 -1357 b 292 -1368 289 -1357 291 -1363 b 313 -1512 306 -1415 313 -1464 b 292 -1648 313 -1560 306 -1605 b 288 -1660 289 -1654 288 -1660 b 288 -1660 288 -1660 288 -1660 b 292 -1671 289 -1660 291 -1665 b 313 -1814 306 -1719 313 -1766 b 250 -2040 313 -1897 291 -1977 b 232 -2062 238 -2057 236 -2059 b 221 -2065 230 -2063 225 -2065 b 200 -2045 210 -2065 201 -2057 b 200 -2043 200 -2044 200 -2044 b 208 -2026 200 -2037 202 -2034 b 269 -1826 249 -1966 269 -1897 b 153 -1544 269 -1726 230 -1625 b -9 -1472 115 -1506 58 -1481 b -21 -1471 -14 -1471 -19 -1471 l -24 -1471 l -24 -1343 l -24 -1215 l -20 -1215 b -1 -1229 -12 -1215 -4 -1221 b 142 -1424 13 -1270 74 -1353 b 257 -1582 196 -1478 228 -1524 b 264 -1594 261 -1589 264 -1594 l 264 -1594 b 265 -1582 264 -1594 264 -1589 b 270 -1525 268 -1562 270 -1544 b 153 -1243 270 -1424 228 -1321 b -9 -1170 115 -1203 58 -1178 b -21 -1168 -14 -1170 -19 -1168 l -24 -1168 l -24 -1041 l -24 -913 l -20 -913 b -1 -927 -12 -913 -4 -918 b 142 -1121 13 -967 74 -1050 b 257 -1281 196 -1175 228 -1221 b 264 -1292 261 -1286 264 -1292 l 264 -1292 b 265 -1279 264 -1292 264 -1286 b 270 -1222 268 -1261 270 -1242 b 153 -941 270 -1121 228 -1018 b -9 -867 115 -900 58 -875 b -21 -866 -14 -867 -19 -866 l -24 -866 l -24 -738 l -24 -610 l -20 -610 b -1 -624 -12 -610 -4 -616 b 142 -818 13 -664 74 -749 b 257 -978 196 -873 228 -918 b 264 -989 261 -984 264 -989 l 264 -989 b 265 -977 264 -989 264 -984 b 270 -920 268 -959 270 -939 b 153 -638 270 -818 228 -716 b -9 -564 115 -598 58 -573 b -21 -563 -14 -564 -19 -563 l -24 -563 l -24 -435 l -24 -308 l -20 -308 b -1 -322 -12 -308 -4 -313 b 142 -516 13 -363 74 -446 b 257 -675 196 -571 228 -616 b 264 -687 261 -681 264 -687 l 264 -687 b 265 -674 264 -687 264 -681 b 270 -617 268 -656 270 -637 b 153 -335 270 -516 228 -413 b -9 -262 115 -295 58 -270 b -21 -260 -14 -262 -19 -260 l -24 -260 l -24 -133 '
    },
    'flag128thDown': {
      'x_min': -21.78125,
      'x_max': 367.5,
      'ha': 375,
      'o': 'm 276 1900 b 284 1901 279 1900 281 1901 b 306 1883 291 1901 298 1896 b 367 1686 347 1825 367 1757 b 343 1558 367 1643 359 1600 l 338 1549 l 343 1537 b 367 1411 359 1497 367 1454 b 343 1282 367 1367 359 1324 l 338 1272 l 343 1261 b 367 1135 359 1221 367 1178 b 343 1007 367 1090 359 1047 l 338 996 l 343 985 b 367 859 359 945 367 902 b 343 731 367 814 359 771 l 338 720 l 343 709 b 367 582 359 667 367 626 b 289 362 367 503 340 426 b 239 312 276 345 259 330 b 29 77 152 237 76 152 b -1 18 14 54 2 30 b -19 4 -4 11 -12 4 l -21 4 l -21 133 l -20 260 l -13 262 b 98 299 17 269 62 284 b 111 305 103 302 110 305 b 167 334 123 310 156 327 b 319 595 264 391 319 491 b 313 659 319 616 318 638 b 310 667 311 664 311 667 b 307 663 310 667 308 666 b 240 588 289 637 269 614 b 16 331 141 505 62 413 b -1 294 8 316 1 302 b -19 280 -4 287 -12 280 l -21 280 l -21 408 l -20 537 l -13 538 b 98 576 17 545 62 560 b 111 581 103 578 110 581 b 167 610 123 587 156 603 b 319 871 264 667 319 767 b 313 935 319 892 318 913 b 310 942 311 941 311 942 b 307 939 310 942 308 941 b 240 864 289 913 269 889 b 16 607 141 781 62 689 b -1 570 8 592 1 578 b -19 556 -4 563 -12 556 l -21 556 l -21 684 l -20 813 l -13 814 b 98 852 17 821 62 836 b 111 857 103 855 110 857 b 167 886 123 863 156 880 b 319 1147 264 943 319 1043 b 313 1211 319 1168 318 1189 b 310 1218 311 1217 311 1218 b 307 1215 310 1218 308 1217 b 240 1140 289 1188 269 1165 b 16 884 141 1057 62 966 b -1 846 8 868 1 855 b -19 832 -4 839 -12 832 l -21 832 l -21 960 l -20 1089 l -13 1090 b 98 1128 17 1097 62 1111 b 111 1134 103 1131 110 1134 b 167 1163 123 1139 156 1156 b 319 1424 264 1220 319 1320 b 313 1486 319 1444 318 1465 b 310 1494 311 1493 311 1494 b 307 1492 310 1494 308 1493 b 240 1417 289 1464 269 1442 b 16 1160 141 1333 62 1242 b -1 1121 8 1145 1 1131 b -19 1109 -4 1115 -12 1109 l -21 1109 l -21 1236 l -20 1365 l -13 1367 b 98 1404 17 1374 62 1388 b 111 1410 103 1407 110 1410 b 250 1508 172 1437 215 1467 b 319 1701 296 1564 319 1633 b 270 1859 319 1757 303 1814 b 262 1882 265 1868 262 1875 b 276 1900 262 1890 266 1896 '
    },
    'accidentalFlat': {
      'x_min': -21.78125,
      '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 383 20 616 20 616 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 l -21 -212 l -21 201 l -21 616 l -20 620 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 '
    },
    'accidentalNatural': {
      'x_min': 0,
      'x_max': 239.5625,
      'ha': 244,
      'o': 'm 10 460 b 20 462 13 462 14 462 b 39 449 28 462 35 458 l 40 446 l 40 326 b 40 205 40 259 40 205 b 127 227 40 205 80 215 b 220 249 196 244 213 249 b 227 247 224 249 225 248 b 238 237 231 245 235 241 l 239 233 l 239 -106 l 239 -448 l 238 -451 b 219 -463 234 -459 225 -463 b 198 -451 210 -463 202 -459 l 197 -448 l 197 -324 b 197 -201 197 -248 197 -201 b 110 -223 196 -201 157 -210 b 17 -245 42 -240 24 -245 b 10 -242 13 -245 13 -244 b 0 -233 6 -241 2 -237 l 0 -230 l 0 108 l 0 446 l 0 449 b 10 460 2 453 6 458 m 197 22 b 197 70 197 41 197 58 b 196 116 197 113 197 116 l 196 116 b 118 97 196 116 160 106 l 40 77 l 40 -18 b 40 -112 40 -69 40 -112 l 119 -93 l 197 -73 l 197 22 '
    },
    'accidentalSharp': {
      'x_min': 0,
      'x_max': 323.9375,
      'ha': 331,
      'o': 'm 217 535 b 225 537 220 537 221 537 b 245 524 235 537 242 533 l 246 521 l 247 390 l 247 258 l 273 265 b 306 270 288 269 299 270 b 322 259 315 270 319 267 b 323 208 323 256 323 233 b 322 158 323 184 323 159 b 288 140 318 148 315 147 b 247 130 254 131 247 130 b 247 65 247 130 247 104 b 247 20 247 51 247 36 l 247 -88 l 273 -81 b 306 -76 289 -77 299 -76 b 318 -81 311 -76 315 -77 b 323 -123 323 -87 323 -86 l 323 -138 l 323 -154 b 318 -195 323 -191 323 -190 b 269 -210 314 -199 315 -199 b 249 -216 259 -213 250 -216 l 247 -216 l 247 -349 l 246 -483 l 245 -487 b 225 -499 242 -495 234 -499 b 206 -487 219 -499 210 -495 l 205 -483 l 205 -355 l 205 -227 l 204 -227 l 181 -233 l 138 -244 b 117 -249 127 -247 117 -249 b 115 -385 115 -249 115 -256 l 115 -523 l 114 -526 b 95 -538 110 -534 102 -538 b 74 -526 87 -538 78 -534 l 73 -523 l 73 -391 b 72 -260 73 -269 73 -260 b 72 -260 72 -260 72 -260 b 19 -273 61 -263 23 -273 b 0 -260 10 -273 4 -267 b 0 -209 0 -256 0 -256 l 0 -162 l 1 -158 b 61 -134 5 -148 5 -148 l 73 -131 l 73 -22 b 72 86 73 79 73 86 b 72 86 72 86 72 86 b 19 74 61 83 23 74 b 0 86 10 74 4 79 b 0 137 0 90 0 90 l 0 184 l 1 188 b 61 212 5 198 5 198 l 73 215 l 73 348 l 73 481 l 74 485 b 95 498 78 492 87 498 b 103 495 98 498 100 496 b 114 485 107 494 111 489 l 115 481 l 115 353 l 115 226 l 121 226 b 159 235 123 227 141 231 l 198 247 l 205 248 l 205 384 l 205 521 l 206 524 b 217 535 209 528 212 533 m 205 9 b 205 119 205 70 205 119 l 205 119 b 182 113 204 119 194 116 l 138 102 b 117 97 127 99 117 97 b 115 -12 115 97 115 91 l 115 -122 l 121 -120 b 159 -111 123 -119 141 -115 l 198 -101 l 205 -98 l 205 9 '
    },
    'accidentalDoubleSharp': {
      'x_min': 0,
      'x_max': 367.5,
      'ha': 375,
      'o': 'm 0 124 l 0 187 l 61 187 l 122 187 l 122 138 l 122 91 l 153 61 l 183 30 l 213 61 l 243 91 l 243 138 l 243 187 l 306 187 l 367 187 l 367 124 l 367 61 l 321 61 l 274 61 l 243 30 l 213 0 l 243 -31 l 274 -62 l 321 -62 l 367 -62 l 367 -124 l 367 -188 l 306 -188 l 243 -188 l 243 -140 l 243 -93 l 213 -62 l 183 -31 l 153 -62 l 122 -93 l 122 -140 l 122 -188 l 61 -188 l 0 -188 l 0 -124 l 0 -62 l 46 -62 l 92 -62 l 123 -31 l 153 0 l 123 30 l 92 61 l 46 61 l 0 61 l 0 124 '
    },
    'accidentalDoubleFlat': {
      'x_min': -21.78125,
      '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 383 20 616 20 616 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 179 164 199 187 192 l 210 176 l 210 396 l 210 617 l 212 621 b 231 632 216 628 223 632 b 250 620 239 632 247 628 b 251 383 251 616 251 616 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 -20 -216 -9 -229 -17 -224 l -21 -212 l -21 201 l -21 616 l -20 620 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 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 '
    },
    'accidentalParensLeft': {
      'x_min': -166.0625,
      'x_max': -25.859375,
      'ha': 0,
      'o': 'm -49 369 b -42 370 -46 369 -44 370 b -27 360 -36 370 -29 366 b -25 355 -27 359 -25 358 b -32 335 -25 351 -28 347 b -92 52 -66 248 -87 159 b -93 -1 -93 43 -93 20 b -92 -54 -93 -23 -93 -45 b -32 -337 -85 -162 -66 -251 b -25 -355 -27 -349 -25 -352 b -42 -371 -25 -365 -32 -371 b -61 -353 -50 -371 -51 -369 b -163 -63 -119 -262 -153 -165 b -166 -1 -166 -37 -166 -31 b -163 62 -166 30 -166 36 b -61 352 -153 163 -119 260 b -49 369 -54 365 -51 366 '
    },
    'accidentalParensRight': {
      'x_min': 25.859375,
      'x_max': 164.6875,
      'ha': 168,
      'o': 'm 34 369 b 40 370 35 370 38 370 b 59 353 49 370 50 367 b 164 40 122 254 155 158 b 164 0 164 33 164 16 b 164 -40 164 -16 164 -34 b 59 -353 155 -158 122 -254 b 40 -371 53 -366 47 -371 b 34 -370 38 -371 36 -370 b 25 -358 28 -367 25 -363 b 31 -337 25 -352 27 -347 b 92 0 72 -234 92 -117 b 31 335 92 116 72 233 b 25 356 27 345 25 352 b 34 369 25 363 28 366 '
    },
    'accidentalQuarterToneFlatStein': {
      'x_min': 0,
      'x_max': 272.21875,
      'ha': 278,
      'o': 'm 243 631 b 250 632 246 632 249 632 b 270 620 259 632 268 628 l 272 616 l 272 201 l 272 -212 l 270 -216 b 251 -229 268 -224 259 -229 b 227 -215 243 -229 240 -229 l 151 -142 b 32 -16 81 -80 53 -49 b 0 84 9 18 0 52 b 111 199 0 149 42 199 b 137 197 119 199 127 198 b 228 151 168 191 197 177 l 231 148 l 231 383 b 232 620 231 616 231 616 b 243 631 234 624 238 630 m 168 131 b 152 133 163 133 157 133 b 107 102 130 133 111 120 b 106 86 107 97 106 91 b 111 41 106 73 108 56 b 227 -152 125 -13 171 -90 l 231 -156 l 231 -37 l 231 80 l 225 87 b 168 131 210 111 190 126 '
    },
    'accidentalThreeQuarterTonesFlatZimmermann': {
      'x_min': 0,
      'x_max': 607.0625,
      'ha': 619,
      'o': 'm 243 631 b 250 632 246 632 249 632 b 270 620 259 632 268 628 l 272 616 l 272 201 l 272 -212 l 270 -216 b 251 -229 268 -224 259 -229 b 227 -215 243 -229 240 -229 l 151 -142 b 32 -16 81 -80 53 -49 b 0 84 9 18 0 52 b 111 199 0 149 42 199 b 137 197 119 199 127 198 b 228 151 168 191 197 177 l 231 148 l 231 383 b 232 620 231 616 231 616 b 243 631 234 624 238 630 m 168 131 b 152 133 163 133 157 133 b 107 102 130 133 111 120 b 106 86 107 97 106 91 b 111 41 106 73 108 56 b 227 -152 125 -13 171 -90 l 231 -156 l 231 -37 l 231 80 l 225 87 b 168 131 210 111 190 126 m 347 631 b 353 632 348 632 351 632 b 374 620 363 632 371 628 b 375 383 375 616 375 616 l 375 148 l 377 151 b 492 199 415 183 454 199 b 537 191 507 199 522 197 b 607 84 582 176 607 134 b 583 0 607 58 598 29 b 455 -142 562 -40 533 -72 l 378 -215 b 355 -229 364 -229 362 -229 b 334 -216 345 -229 337 -224 l 333 -212 l 333 201 l 333 616 l 334 620 b 347 631 337 624 341 630 m 465 131 b 451 133 461 133 455 133 b 445 133 449 133 446 133 b 379 87 419 129 396 113 l 375 80 l 375 -37 l 375 -156 l 378 -152 b 499 81 451 -72 499 20 l 499 83 b 465 131 499 113 490 126 '
    },
    'accidentalQuarterToneSharpStein': {
      'x_min': 0,
      'x_max': 193.28125,
      'ha': 197,
      'o': 'm 85 514 b 95 517 88 517 89 517 b 114 505 103 517 110 513 l 115 502 l 115 376 b 115 249 115 306 115 249 b 141 258 117 249 127 252 l 167 266 l 172 266 b 190 254 181 265 187 262 l 193 251 l 193 202 l 193 188 b 187 147 193 149 191 152 b 147 130 183 142 182 141 l 115 119 l 115 9 b 115 -99 115 -51 115 -99 b 141 -91 115 -99 127 -95 b 171 -81 166 -81 167 -81 l 171 -81 b 191 -94 181 -81 189 -87 b 193 -142 191 -97 193 -120 b 191 -195 193 -167 191 -194 b 125 -227 187 -205 187 -204 l 115 -230 l 115 -366 l 115 -503 l 114 -506 b 95 -519 110 -514 102 -519 b 74 -506 87 -519 78 -514 l 73 -503 l 73 -374 b 73 -245 73 -260 73 -245 b 73 -245 73 -245 73 -245 b 55 -252 72 -245 63 -249 l 32 -260 b 19 -263 27 -262 23 -263 b 4 -256 13 -263 8 -260 b 0 -215 0 -251 0 -254 b 0 -199 0 -210 0 -206 l 0 -152 l 1 -149 b 8 -140 2 -145 5 -141 b 42 -127 9 -140 24 -133 l 73 -116 l 73 -5 b 73 23 73 4 73 15 b 73 105 73 70 73 105 b 49 97 73 105 61 101 b 17 88 32 91 23 88 b 4 95 10 88 8 91 b 0 137 0 101 0 98 b 0 151 0 141 0 145 l 0 199 l 1 202 b 43 224 5 212 5 212 l 73 234 l 73 367 l 73 502 l 74 505 b 85 514 77 509 81 513 '
    },
    'accidentalThreeQuarterTonesSharpStein': {
      'x_min': -1.359375,
      'x_max': 455.96875,
      'ha': 465,
      'o': 'm 352 541 b 357 542 353 542 355 542 b 377 530 364 542 372 537 l 378 526 l 378 394 l 379 262 l 404 266 b 436 270 420 269 430 270 b 450 265 443 270 446 269 b 455 220 455 259 455 260 l 455 208 l 455 161 l 454 156 b 411 140 449 147 447 147 b 378 133 393 137 379 134 b 378 68 378 133 378 106 b 378 22 378 54 378 38 l 379 -87 l 404 -83 b 436 -79 420 -80 430 -79 b 450 -84 443 -79 446 -80 b 455 -129 455 -90 455 -88 l 455 -141 l 455 -188 l 454 -192 b 413 -209 449 -202 447 -202 b 382 -215 398 -212 383 -215 l 378 -215 l 378 -345 l 378 -380 b 375 -485 378 -484 378 -480 b 357 -494 371 -491 364 -494 b 340 -485 351 -494 344 -491 b 336 -383 337 -480 336 -484 l 336 -349 l 336 -223 l 334 -223 b 291 -231 334 -223 314 -227 l 247 -240 l 247 -371 l 246 -503 l 245 -506 b 225 -519 242 -514 234 -519 b 206 -506 219 -519 210 -514 l 205 -503 l 205 -376 l 205 -248 l 160 -256 l 115 -265 l 115 -396 l 115 -527 l 114 -531 b 95 -544 110 -539 102 -544 b 76 -531 87 -544 78 -539 l 73 -527 l 73 -399 b 73 -273 73 -330 73 -273 b 49 -277 73 -273 61 -274 b 17 -281 32 -280 24 -281 b 4 -276 10 -281 8 -280 b -1 -234 0 -269 -1 -272 b 0 -219 -1 -229 0 -224 l 0 -170 l 1 -167 b 10 -158 2 -163 6 -159 b 49 -149 13 -156 16 -155 l 73 -145 l 73 -34 b 73 76 73 26 73 76 b 49 72 73 76 61 74 b 17 68 32 69 24 68 b 4 73 10 68 8 69 b -1 115 0 80 -1 77 b 0 130 -1 120 0 124 l 0 179 l 1 181 b 10 191 2 186 6 190 b 49 199 13 192 16 194 l 73 204 l 73 338 b 73 374 73 352 73 365 b 77 483 73 484 73 477 b 95 492 81 489 88 492 b 111 483 100 492 107 489 b 115 378 115 477 115 483 l 115 342 b 117 212 115 223 115 212 b 204 229 117 212 200 227 l 205 229 l 205 365 l 205 502 l 206 505 b 225 517 210 513 219 517 b 245 505 234 517 242 513 l 246 502 l 247 369 l 247 237 l 249 237 b 336 254 253 238 336 254 b 337 390 336 254 337 302 l 337 526 l 338 530 b 352 541 341 535 347 539 m 336 15 b 336 126 336 102 336 126 l 336 126 b 291 117 336 126 315 122 l 247 109 l 247 -1 l 247 -112 l 249 -112 b 336 -95 253 -111 336 -95 b 336 15 336 -95 336 -56 m 205 -120 b 205 -55 205 -120 205 -93 b 205 -9 205 -41 205 -24 l 205 101 l 160 93 l 115 84 l 115 -26 b 115 -83 115 -49 115 -69 b 117 -137 115 -133 115 -137 b 205 -120 118 -137 204 -120 '
    },
    '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 '
    },
    'accidentalKomaSharp': {
      'x_min': -1.359375,
      'x_max': 455.96875,
      'ha': 465,
      'o': 'm 352 541 b 357 542 353 542 355 542 b 377 530 364 542 372 537 l 378 526 l 378 394 l 379 262 l 404 266 b 436 270 420 269 430 270 b 450 265 443 270 446 269 b 455 220 455 259 455 260 l 455 208 l 455 161 l 454 156 b 411 140 449 147 447 147 b 378 133 393 137 379 134 b 378 68 378 133 378 106 b 378 22 378 54 378 38 l 379 -87 l 404 -83 b 436 -79 420 -80 430 -79 b 450 -84 443 -79 446 -80 b 455 -129 455 -90 455 -88 l 455 -141 l 455 -188 l 454 -192 b 413 -209 449 -202 447 -202 b 382 -215 398 -212 383 -215 l 378 -215 l 378 -345 l 378 -380 b 375 -485 378 -484 378 -480 b 357 -494 371 -491 364 -494 b 340 -485 351 -494 344 -491 b 336 -383 337 -480 336 -484 l 336 -349 l 336 -223 l 334 -223 b 291 -231 334 -223 314 -227 l 247 -240 l 247 -371 l 246 -503 l 245 -506 b 225 -519 242 -514 234 -519 b 206 -506 219 -519 210 -514 l 205 -503 l 205 -376 l 205 -248 l 160 -256 l 115 -265 l 115 -396 l 115 -527 l 114 -531 b 95 -544 110 -539 102 -544 b 76 -531 87 -544 78 -539 l 73 -527 l 73 -399 b 73 -273 73 -330 73 -273 b 49 -277 73 -273 61 -274 b 17 -281 32 -280 24 -281 b 4 -276 10 -281 8 -280 b -1 -234 0 -269 -1 -272 b 0 -219 -1 -229 0 -224 l 0 -170 l 1 -167 b 10 -158 2 -163 6 -159 b 49 -149 13 -156 16 -155 l 73 -145 l 73 -34 b 73 76 73 26 73 76 b 49 72 73 76 61 74 b 17 68 32 69 24 68 b 4 73 10 68 8 69 b -1 115 0 80 -1 77 b 0 130 -1 120 0 124 l 0 179 l 1 181 b 10 191 2 186 6 190 b 49 199 13 192 16 194 l 73 204 l 73 338 b 73 374 73 352 73 365 b 77 483 73 484 73 477 b 95 492 81 489 88 492 b 111 483 100 492 107 489 b 115 378 115 477 115 483 l 115 342 b 117 212 115 223 115 212 b 204 229 117 212 200 227 l 205 229 l 205 365 l 205 502 l 206 505 b 225 517 210 513 219 517 b 245 505 234 517 242 513 l 246 502 l 247 369 l 247 237 l 249 237 b 336 254 253 238 336 254 b 337 390 336 254 337 302 l 337 526 l 338 530 b 352 541 341 535 347 539 m 336 15 b 336 126 336 102 336 126 l 336 126 b 291 117 336 126 315 122 l 247 109 l 247 -1 l 247 -112 l 249 -112 b 336 -95 253 -111 336 -95 b 336 15 336 -95 336 -56 m 205 -120 b 205 -55 205 -120 205 -93 b 205 -9 205 -41 205 -24 l 205 101 l 160 93 l 115 84 l 115 -26 b 115 -83 115 -49 115 -69 b 117 -137 115 -133 115 -137 b 205 -120 118 -137 204 -120 '
    },
    '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 '
    },
    'articAccentAbove': {
      'x_min': -348.4375,
      'x_max': 24.5,
      'ha': 25,
      'o': 'm -330 155 b -322 156 -329 156 -326 156 b -315 156 -319 156 -317 156 b -298 147 -311 155 -308 154 b -19 30 -224 98 -122 55 l 2 26 b 24 -1 17 22 24 13 b 2 -27 24 -15 17 -23 l -19 -31 b -298 -148 -122 -56 -224 -99 b -322 -158 -313 -158 -315 -158 b -348 -131 -338 -158 -348 -145 b -344 -117 -348 -127 -347 -122 b -328 -104 -341 -112 -338 -111 b -127 -8 -269 -65 -202 -33 b -106 0 -115 -4 -106 -1 b -127 6 -106 0 -115 2 b -328 102 -202 31 -269 63 b -344 116 -338 109 -341 111 b -348 130 -347 120 -348 124 b -330 155 -348 141 -341 152 '
    },
    'articAccentBelow': {
      'x_min': -348.4375,
      'x_max': 24.5,
      'ha': 25,
      'o': 'm -330 155 b -322 156 -329 156 -326 156 b -315 156 -319 156 -317 156 b -298 147 -311 155 -308 154 b -19 30 -224 98 -122 55 l 2 26 b 24 -1 17 22 24 13 b 2 -27 24 -15 17 -23 l -19 -31 b -298 -148 -122 -56 -224 -99 b -322 -158 -313 -158 -315 -158 b -348 -131 -338 -158 -348 -145 b -344 -117 -348 -127 -347 -122 b -328 -104 -341 -112 -338 -111 b -127 -8 -269 -65 -202 -33 b -106 0 -115 -4 -106 -1 b -127 6 -106 0 -115 2 b -328 102 -202 31 -269 63 b -344 116 -338 109 -341 111 b -348 130 -347 120 -348 124 b -330 155 -348 141 -341 152 '
    },
    'articTenutoAbove': {
      'x_min': 0,
      'x_max': 318.5,
      'ha': 325,
      'o': 'm 20 376 b 167 377 23 377 96 377 b 296 376 231 377 294 377 b 318 347 311 371 318 359 b 296 316 318 333 311 320 b 159 315 294 315 227 315 b 21 316 91 315 24 315 b 0 345 6 320 0 333 b 20 376 0 359 6 371 '
    },
    'articTenutoBelow': {
      'x_min': 0,
      'x_max': 318.5,
      'ha': 325,
      'o': 'm 20 376 b 167 377 23 377 96 377 b 296 376 231 377 294 377 b 318 347 311 371 318 359 b 296 316 318 333 311 320 b 159 315 294 315 227 315 b 21 316 91 315 24 315 b 0 345 6 320 0 333 b 20 376 0 359 6 371 '
    },
    'articStaccatoAbove': {
      'x_min': 0,
      'x_max': 133.390625,
      'ha': 136,
      'o': 'm 54 66 b 65 68 58 68 61 68 b 122 37 88 68 110 56 b 133 -1 130 26 133 12 b 104 -58 133 -23 123 -44 b 66 -69 92 -65 78 -69 b 10 -38 44 -69 23 -58 b 0 -1 2 -27 0 -13 b 54 66 0 30 20 61 '
    },
    'articStaccatoBelow': {
      'x_min': 0,
      'x_max': 133.390625,
      'ha': 136,
      'o': 'm 54 66 b 65 68 58 68 61 68 b 122 37 88 68 110 56 b 133 -1 130 26 133 12 b 104 -58 133 -23 123 -44 b 66 -69 92 -65 78 -69 b 10 -38 44 -69 23 -58 b 0 -1 2 -27 0 -13 b 54 66 0 30 20 61 '
    },
    'articStaccatissimoAbove': {
      'x_min': -73.5,
      'x_max': 72.140625,
      'ha': 74,
      'o': 'm -72 252 l -73 254 l 0 254 l 72 254 l 70 252 b 0 -1 70 248 0 -1 b -72 252 -1 -1 -72 248 '
    },
    'articStaccatissimoBelow': {
      'x_min': -73.5,
      'x_max': 72.140625,
      'ha': 74,
      'o': 'm -72 252 l -73 254 l 0 254 l 72 254 l 70 252 b 0 -1 70 248 0 -1 b -72 252 -1 -1 -72 248 '
    },
    'articMarcatoAbove': {
      'x_min': -149.71875,
      'x_max': 148.359375,
      'ha': 151,
      'o': 'm -8 -1 b -1 0 -5 -1 -4 0 b 16 -11 5 0 13 -4 b 83 -186 17 -12 47 -90 l 148 -358 l 148 -363 b 127 -385 148 -376 138 -385 b 112 -378 122 -385 118 -383 b 54 -226 110 -374 114 -385 b 0 -81 24 -147 0 -81 b -55 -226 -1 -81 -25 -147 b -114 -378 -115 -385 -111 -374 b -129 -385 -119 -383 -123 -385 b -149 -363 -140 -385 -149 -376 l -149 -358 l -84 -186 b -19 -11 -49 -90 -19 -12 b -8 -1 -17 -8 -12 -4 '
    },
    'articMarcatoBelow': {
      'x_min': -149.71875,
      'x_max': 148.359375,
      'ha': 151,
      'o': 'm -8 -1 b -1 0 -5 -1 -4 0 b 16 -11 5 0 13 -4 b 83 -186 17 -12 47 -90 l 148 -358 l 148 -363 b 127 -385 148 -376 138 -385 b 112 -378 122 -385 118 -383 b 54 -226 110 -374 114 -385 b 0 -81 24 -147 0 -81 b -55 -226 -1 -81 -25 -147 b -114 -378 -115 -385 -111 -374 b -129 -385 -119 -383 -123 -385 b -149 -363 -140 -385 -149 -376 l -149 -358 l -84 -186 b -19 -11 -49 -90 -19 -12 b -8 -1 -17 -8 -12 -4 '
    },
    'fermataAbove': {
      'x_min': -442.359375,
      'x_max': 441,
      'ha': 450,
      'o': 'm -31 487 b -1 488 -21 488 -10 488 b 434 104 216 488 397 330 b 441 27 438 79 441 47 b 439 12 441 20 439 15 b 419 0 435 4 427 0 b 404 5 413 0 408 1 b 398 30 400 11 398 13 b 0 351 390 213 213 351 b -59 348 -20 351 -39 349 b -400 30 -251 324 -393 191 b -405 5 -400 13 -401 11 b -420 0 -409 1 -415 0 b -441 12 -428 0 -436 4 b -442 27 -441 15 -442 20 b -435 104 -442 47 -439 79 b -31 487 -401 316 -235 474 m -13 131 b -1 133 -9 133 -5 133 b 51 105 19 133 39 123 b 61 70 58 95 61 83 b 51 34 61 58 58 45 b -1 6 39 16 19 6 b -46 27 -17 6 -34 13 b -62 69 -57 38 -62 54 b -13 131 -62 98 -44 124 '
    },
    'fermataBelow': {
      'x_min': -441,
      'x_max': 439.640625,
      'ha': 449,
      'o': 'm -428 -2 b -421 0 -427 -1 -424 0 b -406 -6 -416 0 -409 -2 b -400 -31 -401 -12 -400 -15 b -1 -352 -392 -215 -215 -352 b 58 -349 19 -352 38 -351 b 398 -31 250 -326 392 -192 b 404 -6 398 -15 400 -12 b 419 -1 408 -2 413 -1 b 439 -13 427 -1 435 -5 b 439 -29 439 -16 439 -22 b 434 -105 439 -48 438 -80 b 0 -489 397 -333 213 -489 b -68 -484 -23 -489 -44 -488 b -441 -36 -280 -452 -436 -263 b -441 -30 -441 -34 -441 -31 b -428 -2 -441 -11 -439 -5 m -13 -9 b -1 -8 -9 -8 -5 -8 b 50 -36 19 -8 39 -19 b 61 -72 57 -47 61 -59 b 50 -106 61 -84 57 -97 b -1 -134 39 -124 19 -134 b -46 -115 -17 -134 -34 -129 b -62 -72 -57 -102 -62 -87 b -13 -9 -62 -44 -44 -16 '
    },
    'breathMarkComma': {
      'x_min': -1.359375,
      'x_max': 193.28125,
      'ha': 197,
      'o': 'm 78 233 b 87 233 81 233 84 233 b 187 140 132 233 174 195 b 193 102 190 127 193 115 b 43 -113 193 22 136 -62 b 27 -119 36 -116 31 -119 b 19 -108 21 -119 19 -115 b 29 -97 19 -102 20 -101 b 102 13 73 -72 102 -27 b 92 51 102 26 98 40 l 91 54 l 84 54 b 8 104 53 54 21 74 b -1 142 1 116 -1 130 b 78 233 -1 187 31 227 '
    },
    'breathMarkUpbow': {
      'x_min': -170.140625,
      'x_max': 168.78125,
      'ha': 172,
      'o': 'm -160 567 b -122 567 -159 567 -149 567 l -87 567 l -84 566 b -74 553 -78 563 -77 560 b -20 366 -73 551 -49 466 b 31 186 8 267 31 186 b 85 371 31 186 55 269 b 140 559 114 473 138 557 b 153 567 141 564 148 567 b 168 559 159 567 166 564 b 168 555 168 557 168 557 b 92 281 168 548 159 513 b 14 13 50 134 14 13 b 0 0 14 6 6 0 b -17 15 -8 0 -17 8 b -93 283 -17 15 -51 136 b -170 552 -166 533 -170 548 b -170 553 -170 552 -170 552 b -160 567 -170 560 -167 564 '
    },
    'caesura': {
      'x_min': 0,
      'x_max': 622.03125,
      'ha': 635,
      'o': 'm 398 417 b 406 419 401 419 404 419 b 427 398 417 419 427 409 b 427 391 427 395 427 392 b 34 -274 424 385 38 -272 b 20 -280 29 -278 25 -280 b 0 -259 9 -280 0 -270 b 0 -252 0 -256 0 -254 b 393 413 2 -247 389 410 b 398 417 394 415 397 416 m 592 417 b 600 419 594 419 597 419 b 622 398 611 419 622 409 b 620 391 622 395 620 392 b 227 -274 617 385 231 -272 b 213 -280 223 -278 219 -280 b 193 -259 202 -280 193 -270 b 194 -252 193 -256 193 -254 b 586 413 196 -247 582 410 b 592 417 588 415 590 416 '
    },
    'caesuraCurved': {
      'x_min': 0,
      'x_max': 503.609375,
      'ha': 514,
      'o': 'm 274 430 b 277 430 276 430 277 430 b 310 394 296 430 310 415 b 308 383 310 391 308 387 b 306 367 307 381 307 374 b 236 120 298 305 272 210 b 40 -273 189 -5 125 -134 b 20 -287 35 -283 27 -287 b 5 -281 14 -287 9 -285 b 0 -267 1 -277 0 -273 b 9 -242 0 -262 2 -255 b 246 395 137 -12 232 242 b 274 430 249 416 257 427 m 468 430 b 472 430 469 430 470 430 b 503 394 490 430 503 415 b 502 383 503 391 503 387 b 499 367 502 381 500 374 b 431 120 491 305 465 210 b 234 -273 382 -5 318 -134 b 213 -287 228 -283 220 -287 b 198 -281 208 -287 202 -285 b 193 -267 194 -277 193 -273 b 202 -242 193 -262 196 -255 b 439 395 330 -12 426 242 b 468 430 442 416 451 427 '
    },
    'restMaxima': {
      'x_min': 0,
      'x_max': 464.140625,
      'ha': 474,
      'o': 'm 0 0 l 0 347 l 76 347 l 153 347 l 153 0 l 153 -348 l 76 -348 l 0 -348 l 0 0 m 308 -1 l 308 347 l 386 347 l 464 347 l 464 -1 l 464 -348 l 386 -348 l 308 -348 l 308 -1 '
    },
    'restDoubleWhole': {
      'x_min': 0,
      'x_max': 386.5625,
      'ha': 394,
      'o': 'm 0 173 l 0 347 l 193 347 l 386 347 l 386 173 l 386 0 l 193 0 l 0 0 l 0 173 '
    },
    'restWhole': {
      'x_min': 0,
      'x_max': 447.8125,
      'ha': 457,
      'o': 'm 0 -87 l 0 0 l 223 0 l 447 0 l 447 -87 l 447 -174 l 223 -174 l 0 -174 l 0 -87 '
    },
    'restHalf': {
      'x_min': 0,
      'x_max': 447.8125,
      'ha': 457,
      'o': 'm 0 86 l 0 173 l 223 173 l 447 173 l 447 86 l 447 0 l 223 0 l 0 0 l 0 86 '
    },
    'restQuarter': {
      'x_min': 0,
      'x_max': 300.8125,
      'ha': 307,
      'o': 'm 49 505 b 53 506 50 505 51 506 b 70 496 58 506 62 503 b 81 485 73 492 78 488 l 96 473 l 111 459 l 122 449 l 134 438 l 182 396 l 255 330 b 292 291 292 298 292 298 l 292 290 l 292 284 l 283 270 b 209 36 234 197 209 113 b 288 -170 209 -44 235 -119 b 299 -184 295 -179 299 -181 b 300 -191 300 -187 300 -188 b 285 -206 300 -199 294 -206 b 280 -206 283 -206 281 -206 b 247 -201 270 -202 259 -201 b 176 -222 223 -201 197 -208 b 114 -340 136 -249 114 -292 b 172 -471 114 -384 134 -433 b 185 -492 182 -481 185 -487 b 181 -502 185 -496 183 -499 b 171 -508 176 -505 174 -508 b 152 -498 166 -508 160 -503 b 0 -284 65 -428 12 -352 b 0 -260 0 -278 0 -270 b 1 -238 0 -252 0 -242 b 148 -140 16 -177 73 -140 b 209 -148 167 -140 189 -142 b 215 -149 212 -148 215 -149 b 215 -149 215 -149 215 -149 l 215 -149 b 201 -136 215 -148 209 -142 l 157 -97 l 96 -41 b 17 34 21 24 17 29 b 17 37 17 36 17 36 b 17 38 17 37 17 38 b 25 56 17 44 17 44 b 110 298 81 131 110 219 b 46 474 110 367 88 431 b 38 491 40 480 38 487 b 49 505 38 498 42 502 '
    },
    'rest8th': {
      'x_min': 0,
      'x_max': 349.8125,
      'ha': 357,
      'o': 'm 88 302 b 103 303 93 302 98 303 b 202 224 149 303 191 270 b 205 199 204 216 205 208 b 178 129 205 173 196 147 l 175 126 l 182 127 b 307 249 236 142 284 190 b 313 259 308 254 311 258 b 329 267 317 265 323 267 b 349 247 340 267 349 259 b 201 -263 349 242 204 -258 b 182 -273 197 -270 190 -273 b 163 -260 174 -273 166 -269 b 161 -256 161 -259 161 -258 b 217 -59 161 -248 170 -220 b 272 129 247 43 272 127 b 272 129 272 129 272 129 b 264 122 272 129 268 126 b 140 80 227 94 183 80 b 36 115 102 80 65 91 b 0 194 10 136 0 165 b 88 302 0 244 32 292 '
    },
    'rest16th': {
      'x_min': 0,
      'x_max': 450.53125,
      'ha': 460,
      'o': 'm 189 302 b 204 303 193 302 198 303 b 303 224 250 303 292 270 b 306 199 304 216 306 208 b 279 129 306 173 296 147 l 276 126 l 281 127 b 408 249 337 142 385 190 b 412 259 409 254 412 258 b 430 267 417 265 423 267 b 450 247 441 267 450 259 b 200 -605 450 242 204 -599 b 182 -616 197 -612 190 -616 b 163 -602 174 -616 166 -610 b 161 -598 161 -601 161 -601 b 217 -402 161 -589 170 -562 b 272 -213 247 -298 272 -213 b 272 -213 272 -213 272 -213 b 264 -219 272 -213 268 -216 b 140 -262 227 -247 182 -262 b 36 -226 102 -262 65 -249 b 0 -145 12 -206 0 -176 b 17 -84 0 -124 5 -104 b 103 -38 38 -54 70 -38 b 191 -91 137 -38 172 -56 b 205 -141 201 -106 205 -124 b 178 -212 205 -167 196 -194 l 175 -215 l 182 -213 b 307 -93 236 -198 284 -151 b 372 129 308 -88 372 127 b 372 129 372 129 372 129 b 364 122 372 129 368 126 b 240 80 328 94 283 80 b 137 115 202 80 166 91 b 99 194 111 136 99 165 b 189 302 99 244 133 292 '
    },
    'rest32nd': {
      'x_min': 0,
      'x_max': 551.25,
      'ha': 563,
      'o': 'm 289 644 b 304 645 294 645 299 645 b 404 566 349 645 392 613 b 406 541 405 557 406 549 b 379 471 406 514 397 489 l 377 467 l 382 470 b 509 591 438 485 485 531 b 513 601 510 595 513 599 b 530 609 518 607 524 609 b 551 588 540 609 551 602 b 200 -605 551 584 204 -599 b 182 -616 197 -612 190 -616 b 163 -602 174 -616 166 -610 b 161 -598 161 -601 161 -601 b 217 -402 161 -589 170 -562 b 272 -213 247 -298 272 -213 b 272 -213 272 -213 272 -213 b 264 -219 272 -213 268 -216 b 140 -262 227 -247 182 -262 b 36 -226 102 -262 65 -249 b 0 -145 12 -206 0 -176 b 17 -84 0 -124 5 -104 b 103 -38 38 -54 70 -38 b 191 -91 137 -38 172 -56 b 205 -141 201 -106 205 -124 b 178 -212 205 -167 196 -194 l 175 -215 l 182 -213 b 307 -93 236 -198 284 -151 b 372 129 308 -88 372 127 b 372 129 372 129 372 129 b 364 122 372 129 368 126 b 240 80 328 94 283 80 b 137 115 202 80 166 91 b 99 195 112 136 99 165 b 118 256 99 217 106 238 b 204 303 138 287 171 303 b 292 249 238 303 273 285 b 306 199 302 234 306 217 b 279 129 306 173 296 148 l 276 126 l 281 127 b 408 248 336 142 385 190 b 473 470 409 254 473 469 b 473 470 473 470 473 470 b 465 464 473 470 469 467 b 341 421 428 435 383 421 b 236 458 303 421 266 433 b 200 537 212 478 200 508 b 289 644 200 585 234 635 '
    },
    'rest64th': {
      'x_min': -1.359375,
      'x_max': 651.96875,
      'ha': 665,
      'o': 'm 389 644 b 405 645 394 645 400 645 b 504 566 450 645 492 613 b 507 541 506 557 507 549 b 480 471 507 514 498 489 l 477 467 l 483 470 b 609 591 539 485 586 531 b 613 601 611 595 613 599 b 631 609 619 607 624 609 b 651 588 641 609 651 602 b 200 -946 651 584 204 -941 b 182 -957 197 -953 190 -957 b 163 -945 174 -957 166 -953 b 161 -939 161 -942 161 -942 b 217 -743 161 -931 170 -904 b 272 -555 247 -639 272 -555 b 272 -555 272 -555 272 -555 b 264 -560 272 -555 268 -557 b 140 -603 227 -589 182 -603 b 36 -567 102 -603 65 -592 b -1 -487 12 -548 -1 -517 b 17 -427 -1 -466 5 -445 b 103 -380 38 -395 70 -380 b 191 -433 137 -380 172 -398 b 205 -484 201 -448 205 -466 b 178 -553 205 -509 196 -535 l 175 -557 l 182 -555 b 307 -435 236 -539 284 -494 b 372 -213 308 -430 372 -215 b 372 -213 372 -213 372 -213 b 364 -219 372 -213 368 -216 b 240 -262 328 -247 283 -262 b 137 -226 202 -262 166 -249 b 99 -145 112 -206 99 -176 b 118 -84 99 -124 106 -104 b 204 -38 138 -54 171 -38 b 292 -91 238 -38 273 -56 b 306 -141 302 -106 306 -124 b 279 -212 306 -167 296 -194 l 276 -215 l 281 -213 b 408 -93 336 -198 385 -151 b 473 129 409 -88 473 127 b 473 129 473 129 473 129 b 465 122 473 129 469 126 b 341 80 428 94 383 80 b 236 115 303 80 266 91 b 200 195 213 136 200 165 b 217 256 200 217 206 238 b 304 303 239 287 272 303 b 393 249 338 303 374 285 b 406 199 402 234 406 217 b 379 129 406 173 397 148 l 377 126 l 382 127 b 509 248 436 142 485 190 b 574 470 510 254 574 469 b 574 470 574 470 574 470 b 566 464 574 470 570 467 b 442 421 529 435 484 421 b 337 458 404 421 367 433 b 300 537 313 478 300 508 b 389 644 300 585 334 635 '
    },
    'rest128th': {
      'x_min': -1.359375,
      'x_max': 752.703125,
      'ha': 768,
      'o': 'm 490 985 b 504 986 495 986 500 986 b 604 907 551 986 593 954 b 607 884 607 900 607 892 b 581 813 607 857 597 831 l 578 810 l 583 811 b 710 932 638 827 687 873 b 714 943 711 936 713 942 b 730 952 720 949 725 952 b 752 931 741 952 752 943 b 200 -946 752 927 204 -941 b 182 -957 197 -953 190 -957 b 163 -945 174 -957 166 -953 b 161 -939 161 -942 161 -942 b 217 -743 161 -931 170 -904 b 272 -555 247 -639 272 -555 b 272 -555 272 -555 272 -555 b 264 -560 272 -555 268 -557 b 140 -603 227 -589 182 -603 b 36 -567 102 -603 65 -592 b -1 -487 12 -548 -1 -517 b 17 -427 -1 -466 5 -445 b 103 -380 38 -395 70 -380 b 191 -433 137 -380 172 -398 b 205 -484 201 -448 205 -466 b 178 -553 205 -509 196 -535 l 175 -557 l 182 -555 b 307 -435 236 -539 284 -494 b 372 -213 308 -430 372 -215 b 372 -213 372 -213 372 -213 b 364 -219 372 -213 368 -216 b 240 -262 328 -247 283 -262 b 137 -226 202 -262 166 -249 b 99 -145 112 -206 99 -176 b 118 -84 99 -124 106 -104 b 204 -38 138 -54 171 -38 b 292 -91 238 -38 273 -56 b 306 -141 302 -106 306 -124 b 279 -212 306 -167 296 -194 l 276 -215 l 281 -213 b 408 -93 336 -198 385 -151 b 473 129 409 -88 473 127 b 473 129 473 129 473 129 b 465 122 473 129 469 126 b 341 80 428 94 383 80 b 236 115 303 80 266 91 b 200 195 213 136 200 165 b 217 256 200 217 206 238 b 304 303 239 287 272 303 b 393 249 338 303 374 285 b 406 199 402 234 406 217 b 379 129 406 173 397 148 l 377 126 l 382 127 b 509 248 436 142 485 190 b 574 470 510 254 574 469 b 574 470 574 470 574 470 b 566 464 574 470 570 467 b 442 421 529 435 484 421 b 337 458 404 421 367 433 b 300 538 314 477 300 508 b 318 598 300 559 306 580 b 404 645 340 630 372 645 b 494 592 439 645 475 627 b 507 541 502 577 507 559 b 480 471 507 516 498 489 l 477 467 l 483 470 b 608 589 537 485 586 531 b 675 811 611 595 675 810 b 675 811 675 811 675 811 b 666 806 675 811 671 809 b 543 763 628 777 585 763 b 438 799 504 763 468 775 b 401 878 412 820 401 849 b 490 985 401 928 434 977 '
    },
    'dynamicPiano': {
      'x_min': -53.078125,
      'x_max': 513.140625,
      'ha': 485,
      'o': 'm 185 383 b 196 384 187 383 191 384 b 277 334 230 384 259 365 b 288 301 281 324 288 306 b 288 297 288 298 288 297 b 294 302 289 297 291 299 b 394 370 323 338 367 367 b 404 371 398 370 401 371 b 510 272 453 371 498 328 b 513 237 513 262 513 251 b 507 172 513 217 511 192 b 326 -34 487 59 412 -26 b 314 -36 322 -36 318 -36 b 274 -24 298 -36 283 -31 l 265 -16 b 224 44 246 -1 232 20 b 223 49 224 47 223 49 b 223 49 223 49 223 49 b 149 -197 221 48 149 -194 b 149 -198 149 -197 149 -198 b 170 -210 149 -202 155 -205 b 187 -215 174 -210 175 -212 b 204 -231 201 -219 204 -222 b 197 -245 204 -240 202 -242 l 194 -248 l 76 -248 l -42 -248 l -46 -245 b -53 -231 -51 -242 -53 -240 b -35 -215 -53 -222 -49 -217 b -13 -210 -21 -212 -20 -212 b -6 -208 -10 -209 -8 -208 b 0 -206 -6 -208 -2 -206 b 25 -188 13 -201 21 -195 b 163 280 28 -183 163 276 b 166 291 163 283 164 287 b 167 302 167 295 167 299 b 155 324 167 315 161 324 b 155 324 155 324 155 324 b 65 230 125 322 85 280 b 53 215 61 217 58 215 b 51 215 53 215 51 215 b 42 224 46 215 42 217 b 57 263 42 231 47 244 b 140 360 77 305 104 337 b 152 370 144 365 149 369 b 185 383 157 376 172 381 m 374 306 b 366 308 371 308 368 308 b 300 273 348 308 321 294 b 284 254 288 262 287 259 b 280 242 283 249 281 245 b 257 169 279 240 270 213 l 236 98 l 236 93 b 251 48 238 77 243 61 b 279 27 258 37 272 27 b 281 27 279 27 280 27 b 291 31 281 27 287 30 b 396 170 334 52 378 109 b 406 247 402 197 406 224 b 401 277 406 259 405 270 b 374 306 397 290 383 303 '
    },
    'dynamicMezzo': {
      'x_min': 46.28125,
      'x_max': 669.671875,
      'ha': 563,
      'o': 'm 183 376 b 189 376 185 376 187 376 b 212 374 197 376 208 376 b 265 337 234 369 253 355 b 274 317 268 331 273 320 b 274 316 274 317 274 316 b 280 323 276 316 276 319 b 311 358 288 337 299 348 b 319 366 315 360 318 365 b 356 376 326 373 340 376 b 382 371 364 376 374 374 b 428 337 400 366 417 352 b 436 317 431 331 436 320 b 438 316 436 317 436 316 b 442 323 438 316 439 319 b 475 358 451 337 462 348 b 483 366 477 360 481 365 b 518 376 488 373 503 376 b 544 373 528 376 536 376 b 604 285 579 360 604 326 b 597 249 604 273 601 258 b 543 63 596 247 544 70 b 541 54 543 61 541 55 b 540 44 540 51 540 47 b 552 23 540 33 545 23 b 552 23 552 23 552 23 b 647 126 586 29 627 72 b 658 138 651 136 653 138 b 660 138 660 138 660 138 b 669 129 666 137 669 136 b 654 88 669 122 665 109 b 562 -12 631 43 602 9 l 549 -19 b 521 -27 540 -24 530 -27 b 447 30 490 -27 458 -4 b 443 58 445 38 443 48 b 450 93 443 72 446 84 b 504 278 453 97 504 272 b 507 288 506 283 506 287 b 509 298 507 292 509 295 b 491 326 509 310 502 320 b 487 327 490 327 488 327 b 479 324 484 327 483 326 b 441 270 462 316 443 288 b 435 249 441 265 436 254 b 398 127 434 248 419 195 b 362 4 379 61 362 5 b 328 -1 359 -1 362 -1 b 314 -1 323 -1 319 -1 b 302 -1 310 -1 306 -1 b 266 4 266 -1 269 -1 b 265 6 265 5 265 5 b 303 144 265 13 272 34 b 343 278 325 216 343 276 b 344 288 343 281 344 285 b 345 298 345 291 345 295 b 330 326 345 310 340 320 b 323 327 328 327 325 327 b 317 324 322 327 321 326 b 279 270 300 316 281 288 b 273 249 279 265 274 254 b 236 127 272 248 255 195 b 200 4 216 61 200 5 b 164 -1 197 -1 198 -1 b 151 -1 161 -1 156 -1 b 140 -1 147 -1 142 -1 b 103 4 104 -1 106 -1 b 103 6 103 5 103 5 b 141 144 103 13 108 34 b 181 278 161 216 179 276 b 182 288 181 281 181 285 b 183 298 182 291 183 295 b 168 324 183 310 178 320 b 160 327 166 326 163 327 b 141 320 156 327 151 324 b 69 230 112 305 85 272 b 57 215 65 217 62 215 b 55 215 57 215 55 215 b 46 224 49 215 46 217 b 59 260 46 231 50 242 b 151 363 81 306 112 341 b 161 369 155 365 160 367 b 183 376 166 371 174 374 '
    },
    'dynamicForte': {
      'x_min': -118.421875,
      'x_max': 597.53125,
      'ha': 381,
      'o': 'm 460 574 b 464 574 461 574 462 574 b 488 574 470 574 481 574 b 500 573 491 574 498 574 b 594 503 543 570 588 538 b 597 488 596 498 597 494 b 528 417 597 449 564 417 b 502 423 519 417 510 419 b 465 481 477 434 465 458 b 488 528 465 499 472 516 b 490 530 490 530 490 530 b 490 530 490 530 490 530 b 468 517 488 530 475 523 b 349 340 419 485 377 420 b 347 330 348 334 347 330 b 383 328 347 328 363 328 b 428 326 423 328 424 328 b 442 302 438 320 442 312 b 430 281 442 294 438 285 b 385 276 424 277 426 276 l 377 276 l 332 276 l 330 269 b 178 -117 303 126 250 -9 b 1 -249 129 -194 69 -237 b -20 -251 -6 -251 -13 -251 b -114 -187 -65 -251 -100 -227 b -118 -156 -117 -177 -118 -166 b -51 -84 -118 -116 -91 -84 b -31 -87 -46 -84 -39 -86 b 16 -152 0 -95 16 -124 b -12 -205 16 -173 8 -194 b -16 -208 -14 -206 -16 -208 b -14 -208 -16 -208 -14 -208 b -9 -206 -14 -208 -12 -208 b 74 -124 23 -197 54 -166 b 172 224 98 -79 125 22 b 185 276 178 252 183 274 b 185 276 185 276 185 276 b 141 276 185 276 181 276 b 91 280 96 276 96 276 b 77 302 83 285 77 294 b 91 326 77 312 83 320 b 148 328 95 328 96 328 l 198 330 l 202 341 b 460 574 249 473 351 566 '
    },
    'dynamicRinforzando': {
      'x_min': 78.9375,
      'x_max': 485.921875,
      'ha': 417,
      'o': 'm 362 378 b 378 380 367 380 372 380 b 472 348 415 380 453 367 b 485 315 481 338 485 327 b 462 273 485 298 477 281 b 439 267 454 269 446 267 b 398 290 424 267 409 274 b 344 319 385 309 364 319 b 281 269 315 319 289 301 b 279 262 280 266 279 262 b 276 256 279 260 277 258 b 274 249 276 254 274 251 b 238 127 273 248 257 192 b 201 4 217 61 201 5 b 166 -1 198 -1 200 -1 b 153 -1 163 -1 157 -1 b 141 -1 148 -1 144 -1 b 104 4 106 -1 107 -1 b 104 6 104 5 104 5 b 142 144 104 13 110 34 b 182 278 164 219 181 276 b 183 288 182 281 182 285 b 185 302 185 292 185 298 b 164 330 185 317 176 328 b 159 330 163 330 161 330 b 102 302 140 330 119 320 b 91 294 95 295 93 294 b 88 294 91 294 89 294 b 78 303 83 294 78 298 b 81 312 78 306 78 309 b 200 373 106 347 160 373 b 215 371 205 373 209 371 b 266 335 235 367 254 353 b 269 331 268 333 269 331 b 269 331 269 331 269 331 b 273 335 269 331 270 334 b 362 378 298 359 330 376 '
    },
    'dynamicSforzando': {
      'x_min': 70.78125,
      'x_max': 378.390625,
      'ha': 315,
      'o': 'm 246 373 b 254 373 249 373 251 373 b 372 324 303 373 360 351 b 378 302 377 317 378 309 b 338 251 378 278 362 255 b 328 249 334 249 332 249 b 283 294 303 249 283 270 b 288 315 283 301 284 308 b 289 319 289 317 289 319 b 289 319 289 319 289 319 b 283 320 289 320 287 320 b 270 322 279 322 274 322 b 206 288 242 322 215 308 b 206 283 206 287 206 285 b 257 223 206 267 230 238 b 284 206 272 213 277 210 b 351 90 328 173 351 130 b 340 47 351 74 348 59 b 205 -30 314 -2 264 -30 b 182 -29 198 -30 190 -30 b 84 15 147 -24 103 -5 b 70 48 74 24 70 36 b 108 99 70 70 85 94 b 121 102 112 101 117 102 b 167 56 147 102 167 80 b 159 31 167 48 164 40 l 156 26 l 157 26 b 190 20 167 22 178 20 b 220 26 201 20 212 22 b 258 65 243 34 258 51 b 257 70 258 66 258 69 b 204 126 249 94 234 109 b 114 258 148 158 114 209 b 125 302 114 273 118 288 b 246 373 147 342 193 370 '
    },
    'dynamicZ': {
      'x_min': 29.9375,
      'x_max': 420.578125,
      'ha': 371,
      'o': 'm 115 345 b 221 347 117 345 166 347 b 411 345 306 347 409 345 b 420 330 416 342 420 335 b 415 319 420 326 419 321 b 178 118 397 303 179 118 b 178 117 178 118 178 117 b 181 117 178 117 178 117 b 189 117 182 117 185 117 b 193 117 190 117 191 117 b 247 98 215 117 232 111 b 296 75 266 83 280 76 b 302 75 299 75 300 75 b 322 91 311 75 315 79 b 322 91 322 91 322 91 b 322 91 322 91 322 91 b 319 91 322 91 321 91 b 313 90 318 90 315 90 b 283 107 300 90 288 97 b 277 126 279 114 277 121 b 319 167 277 149 295 167 b 319 167 319 167 319 167 b 362 118 347 167 362 147 b 355 82 362 108 359 96 b 311 33 349 65 340 55 b 224 1 284 12 253 1 b 194 5 213 1 204 2 b 168 18 183 8 178 11 b 110 36 151 30 130 36 b 57 15 88 36 68 29 b 47 11 54 12 51 11 b 31 20 40 11 34 13 b 29 26 31 22 29 25 b 68 66 29 36 39 45 b 285 250 73 71 281 248 b 285 250 285 250 285 250 b 231 252 285 252 261 252 b 137 250 190 252 141 250 b 93 227 122 248 110 241 b 78 220 88 222 83 220 b 66 227 74 220 70 222 b 63 234 65 229 63 231 b 85 291 63 241 69 252 b 115 345 108 342 108 344 '
    },
    'ornamentTrill': {
      'x_min': -340.28125,
      'x_max': 338.921875,
      'ha': 346,
      'o': 'm -32 520 b -29 521 -31 520 -31 521 b -23 519 -27 521 -24 520 b -20 513 -21 517 -20 516 b -21 506 -20 512 -20 509 b -31 474 -23 502 -27 488 l -53 402 l -66 352 l -68 349 l -57 349 b -32 351 -51 349 -40 351 b 123 370 19 352 74 359 b 137 371 127 370 133 371 b 170 356 152 371 164 366 b 171 355 170 355 170 355 b 216 366 174 355 183 358 b 280 378 268 377 266 377 b 287 378 283 378 284 378 b 332 349 307 378 322 369 b 338 319 336 341 338 330 b 332 301 338 310 336 302 b 242 280 329 299 246 280 b 242 280 242 280 242 280 b 235 288 236 280 235 283 b 235 292 235 290 235 291 b 236 302 236 297 236 299 b 220 337 236 316 230 330 l 216 340 l 210 335 b 159 276 189 322 172 301 b 118 149 152 265 156 274 b 81 34 84 36 85 36 b -8 13 78 33 -4 13 b -8 13 -8 13 -8 13 b -14 20 -12 15 -14 15 b -8 44 -14 24 -12 31 b -2 66 -5 55 -2 65 b -2 66 -2 66 -2 66 l -2 66 b -43 41 -2 66 -21 55 b -114 4 -98 8 -98 8 b -144 0 -123 0 -134 0 b -242 99 -197 0 -242 43 b -242 109 -242 102 -242 105 b -212 219 -240 122 -242 116 b -185 312 -197 270 -185 312 l -185 312 b -189 312 -185 312 -186 312 b -259 312 -200 312 -227 312 b -321 310 -291 312 -310 310 b -334 312 -330 310 -334 312 b -340 319 -338 313 -340 316 b -336 326 -340 322 -338 324 b -291 337 -334 326 -314 331 l -247 347 l -210 348 b -172 348 -190 348 -172 348 b -168 363 -172 348 -171 355 b -145 442 -151 424 -145 441 b -133 452 -144 444 -140 446 l -77 489 b -32 520 -53 506 -32 520 m 57 334 b 53 335 55 335 54 335 b 44 334 50 335 49 335 b -70 316 8 326 -28 320 b -78 309 -78 316 -78 316 b -108 202 -80 305 -88 274 b -141 81 -136 112 -141 93 b -140 74 -141 79 -141 77 b -117 49 -137 59 -127 49 b -107 52 -114 49 -110 51 b 16 127 -106 54 14 126 b 42 217 16 127 42 215 b 49 241 42 222 44 229 b 73 320 53 251 73 317 b 57 334 73 327 65 333 '
    },
    'ornamentTurn': {
      'x_min': -423.3125,
      'x_max': 421.9375,
      'ha': 431,
      'o': 'm -262 197 b -247 197 -257 197 -253 197 b -118 162 -210 197 -163 184 b 40 45 -61 134 -13 98 b 277 -95 119 -33 200 -81 b 289 -97 281 -97 285 -97 b 378 0 332 -97 371 -55 b 378 11 378 4 378 6 b 302 83 378 55 345 83 b 242 66 283 83 262 77 b 208 56 231 59 219 56 b 148 120 175 56 148 81 b 201 186 148 151 164 172 b 261 198 220 194 240 198 b 420 45 341 198 411 136 b 421 22 421 37 421 29 b 245 -199 421 -93 338 -199 b 238 -198 243 -199 240 -199 b -44 -47 148 -194 50 -141 b -250 86 -114 22 -183 66 b -295 94 -270 91 -283 94 b -315 91 -302 94 -307 94 b -381 4 -356 81 -381 43 b -355 -56 -381 -18 -372 -40 b -298 -81 -338 -73 -319 -81 b -246 -68 -283 -81 -265 -77 b -212 -58 -234 -61 -223 -58 b -178 -69 -200 -58 -189 -62 b -151 -122 -160 -81 -151 -101 b -171 -167 -151 -138 -157 -155 b -239 -195 -185 -181 -213 -192 b -257 -197 -245 -197 -250 -197 b -423 -5 -352 -197 -423 -109 b -412 65 -423 16 -419 40 b -262 197 -389 137 -329 188 '
    },
    'ornamentTurnSlash': {
      'x_min': -423.3125,
      'x_max': 421.9375,
      'ha': 431,
      'o': 'm -10 276 b -2 277 -8 277 -5 277 b 17 265 5 277 13 273 b 19 163 19 260 19 260 l 19 68 l 39 45 b 277 -95 122 -34 200 -81 b 289 -97 281 -97 285 -97 b 378 0 332 -97 371 -54 b 378 11 378 4 378 6 b 302 83 378 55 345 83 b 242 66 283 83 262 77 b 208 56 231 59 219 56 b 148 120 175 56 148 81 b 200 186 148 151 164 172 b 261 198 220 194 240 198 b 420 45 341 198 411 137 b 421 22 421 37 421 29 b 257 -198 421 -86 347 -188 b 242 -198 251 -198 247 -198 b 20 -105 181 -198 95 -163 l 19 -104 l 19 -183 b 19 -216 19 -195 19 -206 b 12 -273 19 -272 17 -267 b -2 -278 8 -277 2 -278 b -21 -266 -10 -278 -19 -274 b -23 -165 -23 -263 -23 -262 l -23 -69 l -44 -47 b -250 86 -117 23 -183 66 b -295 94 -270 93 -284 94 b -315 91 -302 94 -308 94 b -381 5 -356 81 -381 43 b -355 -56 -381 -16 -372 -40 b -299 -81 -338 -73 -319 -81 b -246 -68 -283 -81 -265 -77 b -212 -58 -234 -61 -223 -58 b -168 -77 -196 -58 -179 -65 b -151 -122 -156 -90 -151 -105 b -179 -174 -151 -141 -160 -162 b -239 -195 -194 -184 -217 -192 b -257 -197 -245 -195 -250 -197 b -423 -5 -349 -197 -423 -113 b -423 0 -423 -4 -423 -1 b -277 194 -420 97 -362 173 b -247 197 -268 197 -258 197 b -24 104 -185 197 -100 162 l -23 102 l -23 181 b -21 265 -23 260 -23 260 b -10 276 -20 269 -14 274 '
    },
    'ornamentMordent': {
      'x_min': -402.890625,
      'x_max': 401.53125,
      'ha': 410,
      'o': 'm -10 273 b -4 274 -9 273 -6 274 b 16 262 4 274 12 269 b 17 158 17 259 17 259 l 17 56 l 62 112 b 117 174 110 172 110 172 b 122 174 118 174 119 174 b 132 173 125 174 129 173 b 295 11 134 172 171 134 l 307 -1 l 336 34 b 374 76 366 72 368 74 b 381 77 375 77 378 77 b 401 56 392 77 401 68 b 400 48 401 54 401 51 b 223 -172 397 41 230 -166 b 210 -176 220 -174 215 -176 b 201 -174 206 -176 204 -176 b 112 -87 198 -173 178 -152 b 27 0 65 -38 27 0 b 21 -6 27 0 24 -2 l 17 -12 l 17 -147 b 17 -210 17 -173 17 -194 b 10 -292 17 -297 16 -287 b -2 -299 6 -297 2 -299 b -21 -287 -10 -299 -19 -295 b -24 -174 -23 -284 -23 -284 l -24 -63 l -66 -117 b -121 -176 -110 -170 -114 -176 b -125 -176 -122 -176 -123 -176 b -296 -12 -134 -174 -125 -184 l -308 0 l -337 -34 b -375 -77 -367 -73 -370 -76 b -382 -79 -377 -79 -379 -79 b -402 -58 -393 -79 -402 -69 b -401 -49 -402 -55 -402 -52 b -224 170 -398 -43 -231 165 b -212 174 -221 173 -216 174 b -202 173 -208 174 -205 174 b -39 11 -200 172 -151 122 l -28 -1 l -25 1 l -24 4 l -24 130 b -23 260 -24 256 -24 258 b -10 273 -20 266 -16 270 '
    },
    'ornamentShortTrill': {
      'x_min': -402.890625,
      'x_max': 401.53125,
      'ha': 410,
      'o': 'm -219 173 b -213 174 -217 174 -215 174 b -202 173 -209 174 -205 173 b -114 86 -200 172 -179 151 b -28 0 -66 37 -28 0 b 40 84 -28 0 2 37 b 117 174 111 173 110 172 b 122 174 118 174 119 174 b 132 173 125 174 129 173 b 295 11 134 172 171 134 l 307 -1 l 336 34 b 374 76 366 72 368 74 b 381 77 375 77 378 77 b 401 56 392 77 401 68 b 400 48 401 54 401 51 b 223 -172 397 41 230 -166 b 210 -176 220 -174 215 -176 b 201 -174 206 -176 204 -176 b 112 -87 198 -173 178 -152 b 27 0 65 -38 27 0 b -42 -86 27 0 -4 -38 b -118 -174 -112 -174 -111 -173 b -123 -176 -119 -176 -121 -176 b -133 -174 -126 -176 -130 -174 b -296 -12 -136 -173 -172 -137 l -308 0 l -337 -34 b -375 -77 -367 -73 -370 -76 b -382 -79 -377 -79 -379 -79 b -402 -58 -393 -79 -402 -69 b -401 -49 -402 -55 -402 -52 b -224 172 -398 -43 -228 167 b -219 173 -223 172 -220 173 '
    },
    'ornamentTremblement': {
      'x_min': -571.671875,
      'x_max': 570.3125,
      'ha': 582,
      'o': 'm -386 173 b -381 174 -385 174 -383 174 b -370 173 -377 174 -372 173 b -281 86 -367 172 -347 151 b -196 0 -235 37 -196 0 b -126 84 -196 0 -164 37 b -50 174 -55 173 -57 172 b -44 174 -49 174 -47 174 b -35 173 -42 174 -38 173 b 53 86 -32 172 -12 151 b 138 0 100 37 138 0 b 208 84 140 0 170 37 b 284 174 279 173 277 172 b 289 174 285 174 288 174 b 299 173 294 174 298 173 b 462 11 303 172 338 134 l 475 -1 l 503 34 b 541 76 534 72 536 74 b 548 77 544 77 545 77 b 570 56 560 77 570 68 b 567 48 570 54 568 51 b 392 -172 564 41 397 -166 b 378 -176 387 -174 382 -176 b 368 -174 374 -176 371 -176 b 280 -87 367 -173 345 -152 b 194 0 234 -38 194 0 b 125 -86 194 0 163 -38 b 49 -174 54 -174 55 -173 b 43 -176 47 -176 46 -176 b 34 -174 40 -176 36 -174 b -54 -87 31 -173 10 -152 b -140 0 -102 -38 -140 0 b -209 -86 -141 0 -171 -38 b -285 -174 -280 -174 -279 -173 b -291 -176 -287 -176 -289 -176 b -300 -174 -295 -176 -299 -174 b -464 -12 -304 -173 -340 -137 l -476 0 l -504 -34 b -543 -77 -534 -73 -537 -76 b -549 -79 -545 -79 -547 -79 b -571 -58 -562 -79 -571 -69 b -568 -49 -571 -55 -570 -52 b -392 172 -566 -43 -396 167 b -386 173 -390 172 -387 173 '
    },
    'ornamentPrecompAppoggTrill': {
      'x_min': -571.671875,
      'x_max': 570.3125,
      'ha': 582,
      'o': 'm -559 351 b -551 352 -556 352 -553 352 b -530 338 -543 352 -533 348 b -529 169 -530 337 -529 291 l -529 1 l -507 27 l -441 112 b -382 174 -394 169 -390 174 b -378 174 -381 174 -379 174 b -281 86 -370 174 -375 179 b -196 0 -234 37 -196 0 b -126 84 -196 0 -164 37 b -50 174 -55 173 -57 172 b -44 174 -49 174 -47 174 b -35 173 -42 174 -38 173 b 53 86 -32 172 -12 151 b 138 0 100 37 138 0 b 208 84 140 0 170 37 b 284 174 279 173 279 172 b 289 174 285 174 288 174 b 300 173 294 174 298 173 b 462 11 303 172 340 134 l 475 -1 l 503 34 b 541 76 534 72 536 74 b 548 77 544 77 545 77 b 570 56 560 77 570 68 b 567 48 570 54 568 51 b 392 -172 564 41 397 -166 b 378 -176 387 -174 382 -176 b 368 -174 375 -176 371 -176 b 280 -87 367 -173 347 -152 b 194 0 234 -38 194 0 b 126 -86 194 0 163 -38 b 49 -174 54 -174 55 -173 b 44 -176 47 -176 46 -176 b 34 -174 40 -176 36 -174 b -54 -87 31 -173 10 -152 b -140 0 -102 -38 -140 0 b -209 -86 -140 0 -171 -38 b -285 -174 -280 -174 -279 -173 b -291 -176 -287 -176 -288 -176 b -300 -174 -294 -176 -298 -174 b -464 -11 -303 -173 -374 -102 l -476 0 l -506 -37 b -539 -76 -528 -65 -537 -74 b -551 -80 -543 -79 -547 -80 b -570 -68 -558 -80 -566 -76 l -571 -65 l -571 136 b -570 340 -571 331 -571 337 b -559 351 -568 344 -564 348 '
    },
    'ornamentPrecompSlideTrillDAnglebert': {
      'x_min': -590.71875,
      'x_max': 589.359375,
      'ha': 601,
      'o': 'm -367 173 b -362 174 -366 174 -364 174 b -351 173 -357 174 -353 173 b -262 86 -348 172 -328 151 b -176 0 -216 37 -176 0 b -107 84 -176 0 -145 37 b -31 174 -36 173 -38 172 b -25 174 -29 174 -28 174 b -16 173 -23 174 -19 173 b 72 86 -13 172 6 151 b 157 0 119 37 157 0 b 227 84 159 0 189 37 b 303 174 298 173 296 172 b 308 174 304 174 307 174 b 318 173 313 174 317 173 b 481 11 322 172 357 134 l 494 -1 l 522 34 b 560 76 553 72 555 74 b 567 77 563 77 564 77 b 589 56 579 77 589 68 b 586 48 589 54 588 51 b 411 -172 583 41 416 -166 b 397 -176 406 -174 401 -176 b 387 -174 393 -176 390 -176 b 299 -87 386 -173 366 -152 b 213 0 253 -38 213 0 b 144 -86 213 0 182 -38 b 68 -174 73 -174 74 -173 b 62 -176 66 -176 65 -176 b 53 -174 59 -176 55 -174 b -35 -87 50 -173 29 -152 b -121 0 -83 -38 -121 0 b -190 -86 -122 0 -152 -38 b -266 -174 -261 -174 -259 -173 b -272 -176 -268 -176 -270 -176 b -281 -174 -276 -176 -280 -174 b -371 -86 -284 -173 -304 -152 b -457 0 -417 -38 -457 0 l -457 0 b -477 -26 -457 0 -470 -16 b -548 -227 -524 -88 -548 -161 b -536 -303 -548 -254 -544 -280 b -533 -317 -534 -309 -533 -313 b -553 -338 -533 -330 -541 -338 b -577 -315 -566 -338 -571 -333 b -590 -227 -586 -287 -590 -258 b -518 -9 -590 -154 -564 -77 b -465 56 -509 2 -504 8 l -402 134 b -367 173 -375 169 -372 172 '
    },
    'ornamentPrecompSlideTrillBach': {
      'x_min': -590.71875,
      'x_max': 589.359375,
      'ha': 601,
      'o': 'm 175 273 b 182 274 178 273 181 274 b 202 262 190 274 198 269 b 204 158 204 259 204 259 l 204 56 l 250 112 b 303 174 296 172 298 172 b 308 174 304 174 307 174 b 318 173 313 174 317 173 b 481 11 322 172 357 134 l 494 -1 l 522 34 b 560 76 553 72 555 74 b 567 77 563 77 564 77 b 589 56 579 77 589 68 b 586 48 589 54 588 51 b 411 -172 583 41 416 -166 b 397 -176 406 -174 401 -176 b 387 -174 393 -176 390 -176 b 299 -87 386 -173 366 -152 b 213 0 253 -38 213 0 b 208 -6 213 0 210 -2 l 204 -12 l 204 -147 b 204 -210 204 -173 204 -194 b 198 -292 204 -297 204 -287 b 183 -299 194 -297 189 -299 b 164 -287 175 -299 167 -295 b 163 -174 163 -284 163 -284 l 161 -63 l 119 -117 b 65 -176 76 -170 73 -176 b 61 -176 63 -176 62 -176 b -35 -87 51 -174 57 -180 b -121 0 -83 -38 -121 0 b -190 -86 -122 0 -152 -38 b -266 -174 -261 -174 -259 -173 b -272 -176 -268 -176 -270 -176 b -281 -174 -276 -176 -280 -174 b -371 -86 -284 -173 -304 -152 b -457 0 -417 -38 -457 0 l -457 0 b -477 -26 -457 0 -470 -16 b -548 -227 -524 -88 -548 -161 b -536 -303 -548 -254 -544 -280 b -533 -317 -534 -309 -533 -313 b -553 -338 -533 -330 -541 -338 b -577 -315 -566 -338 -571 -333 b -590 -227 -586 -287 -590 -258 b -518 -9 -590 -154 -564 -77 b -465 56 -509 2 -504 8 l -402 134 b -363 174 -374 170 -371 174 b -359 174 -362 174 -360 174 b -262 86 -351 174 -356 179 b -176 0 -216 37 -176 0 b -107 84 -176 0 -145 37 b -31 174 -36 173 -38 172 b -25 174 -29 174 -28 174 b -16 173 -23 174 -19 173 b 147 11 -13 172 35 123 l 157 -1 l 160 1 l 163 4 l 163 130 b 164 260 163 256 163 258 b 175 273 166 266 170 270 '
    },
    'ornamentPrecompTrillSuffixDandrieu': {
      'x_min': -590.71875,
      'x_max': 589.359375,
      'ha': 601,
      'o': 'm 544 335 b 553 337 548 337 551 337 b 575 313 563 337 570 330 b 589 226 583 285 589 256 b 517 8 589 152 563 76 b 464 -58 507 -4 503 -9 l 401 -136 b 362 -176 372 -172 370 -176 b 357 -176 360 -176 359 -176 b 261 -87 349 -174 355 -180 b 175 0 215 -38 175 0 b 106 -86 175 0 144 -38 b 29 -174 35 -174 36 -173 b 24 -176 28 -176 27 -176 b 14 -174 21 -176 17 -174 b -73 -87 12 -173 -8 -152 b -159 0 -121 -38 -159 0 b -228 -86 -160 0 -190 -38 b -304 -174 -299 -174 -298 -173 b -310 -176 -306 -176 -308 -176 b -319 -174 -314 -176 -318 -174 b -483 -12 -323 -173 -359 -137 l -495 0 l -524 -34 b -562 -77 -553 -73 -556 -76 b -568 -79 -564 -79 -566 -79 b -590 -58 -581 -79 -590 -69 b -588 -49 -590 -55 -589 -52 b -412 170 -585 -43 -417 165 b -398 174 -408 173 -402 174 b -389 173 -394 174 -392 174 b -300 86 -387 172 -366 151 b -215 -1 -254 37 -215 -1 b -145 84 -215 -1 -183 37 b -69 173 -74 173 -76 172 b -63 174 -68 174 -66 174 b -54 173 -61 174 -57 173 b 34 86 -51 172 -31 151 b 119 -1 81 37 119 -1 b 189 84 121 -1 151 37 b 265 173 259 173 258 172 b 270 174 266 174 269 174 b 280 173 274 174 279 173 b 370 84 283 172 303 151 b 455 -1 416 37 455 -1 l 455 -1 b 476 24 455 -1 469 15 b 547 226 522 87 547 159 b 534 302 547 252 543 278 b 532 317 533 308 532 313 b 544 335 532 326 536 333 '
    },
    'ornamentPrecompDoubleCadenceUpperPrefix': {
      'x_min': -597.53125,
      'x_max': 596.171875,
      'ha': 608,
      'o': 'm -533 324 b -525 327 -530 326 -528 327 b -504 305 -514 327 -504 317 b -504 305 -504 305 -504 305 b -513 284 -504 299 -504 299 b -556 112 -541 226 -556 167 b -545 33 -556 84 -552 58 b -524 -20 -541 15 -532 -9 l -522 -23 l -491 15 l -413 111 b -355 174 -367 169 -363 174 b -351 174 -353 174 -352 174 b -254 86 -343 174 -348 179 b -168 -1 -208 37 -168 -1 b -100 84 -168 -1 -137 37 b -23 173 -28 173 -29 172 b -19 174 -21 174 -20 174 b -8 173 -14 174 -10 173 b 80 86 -5 172 13 151 b 166 -1 127 37 166 -1 b 235 84 166 -1 197 37 b 311 173 306 173 304 172 b 317 174 313 174 314 174 b 326 173 319 174 323 173 b 490 11 329 172 366 134 l 502 -1 l 530 34 b 568 76 560 72 563 74 b 575 77 570 77 573 77 b 596 56 586 77 596 68 b 594 48 596 54 596 51 b 417 -172 592 41 424 -166 b 405 -176 415 -174 409 -176 b 396 -174 401 -176 398 -176 b 307 -87 393 -173 372 -152 b 221 -1 259 -38 221 -1 b 152 -86 221 -1 190 -38 b 76 -176 81 -174 83 -173 b 70 -176 74 -176 73 -176 b 61 -174 66 -176 62 -174 b -27 -87 58 -173 38 -152 b -114 -1 -74 -38 -112 -1 b -182 -86 -114 -1 -145 -38 b -258 -176 -253 -174 -253 -173 b -264 -176 -259 -176 -262 -176 b -274 -174 -268 -176 -272 -174 b -438 -11 -277 -173 -348 -102 l -449 0 l -479 -37 b -524 -80 -513 -80 -514 -80 l -524 -80 b -553 -52 -534 -80 -540 -74 b -597 109 -583 -8 -597 48 b -560 280 -597 165 -585 224 b -533 324 -548 310 -540 322 '
    },
    'ornamentPrecompDoubleCadenceUpperPrefixTurn': {
      'x_min': -597.53125,
      'x_max': 596.171875,
      'ha': 608,
      'o': 'm -533 324 b -525 327 -530 326 -528 327 b -504 305 -514 327 -504 317 b -504 305 -504 305 -504 305 b -513 284 -504 299 -504 299 b -556 112 -541 226 -556 167 b -545 33 -556 84 -552 58 b -524 -20 -541 15 -532 -9 l -522 -23 l -491 15 l -413 111 b -355 174 -367 169 -363 174 b -351 174 -353 174 -352 174 b -254 86 -343 174 -348 179 b -168 -1 -208 37 -168 -1 b -100 84 -168 -1 -137 37 b -23 173 -28 173 -29 172 b -19 174 -21 174 -20 174 b -8 173 -14 174 -10 173 b 155 11 -5 172 43 123 l 166 -1 l 168 1 l 170 4 l 170 130 b 171 260 170 256 170 258 b 191 274 175 269 183 274 b 205 267 196 274 201 272 b 212 158 212 262 210 273 l 212 56 l 257 112 b 311 173 304 172 304 172 b 317 174 313 174 314 174 b 326 173 319 174 323 173 b 490 11 329 172 366 134 l 502 -1 l 530 34 b 568 76 560 72 563 74 b 575 77 570 77 573 77 b 596 56 586 77 596 68 b 594 48 596 54 596 51 b 417 -172 592 41 424 -166 b 405 -176 415 -174 409 -176 b 396 -174 401 -176 398 -176 b 307 -87 393 -173 372 -152 b 221 -1 259 -38 221 -1 b 216 -6 221 -1 219 -2 l 212 -12 l 212 -147 b 212 -210 212 -173 212 -194 b 205 -292 212 -297 210 -287 b 191 -299 201 -297 196 -299 b 172 -287 183 -299 175 -295 b 170 -174 171 -284 171 -284 l 170 -63 l 127 -117 b 73 -176 84 -170 80 -176 b 68 -176 72 -176 70 -176 b -27 -87 59 -174 65 -180 b -114 0 -74 -38 -112 0 b -182 -86 -114 0 -145 -38 b -258 -174 -253 -174 -253 -173 b -264 -176 -259 -176 -262 -176 b -274 -174 -268 -176 -272 -174 b -438 -11 -277 -173 -348 -102 l -449 0 l -479 -37 b -524 -80 -513 -80 -514 -80 l -524 -80 b -553 -52 -534 -80 -540 -74 b -597 109 -583 -8 -597 48 b -560 280 -597 165 -585 224 b -533 324 -548 310 -540 322 '
    },
    'ornamentPrecompTrillLowerSuffix': {
      'x_min': -597.53125,
      'x_max': 596.171875,
      'ha': 608,
      'o': 'm -413 173 b -408 174 -412 174 -409 174 b -397 173 -404 174 -400 173 b -308 86 -394 172 -374 151 b -223 0 -261 37 -223 0 b -153 84 -223 0 -191 37 b -77 174 -83 173 -84 172 b -72 174 -76 174 -74 174 b -62 173 -68 174 -63 173 b 25 86 -59 172 -39 151 b 112 0 73 37 111 0 b 181 84 112 0 144 37 b 257 174 251 173 251 172 b 262 174 258 174 261 174 b 273 173 266 174 270 173 b 436 9 276 172 347 101 l 447 -1 l 477 36 b 522 79 511 79 513 79 l 522 79 b 552 51 533 79 539 73 b 596 -112 582 6 596 -51 b 567 -262 596 -161 586 -213 b 539 -322 558 -287 544 -316 b 524 -327 534 -326 529 -327 b 504 -315 515 -327 507 -323 b 503 -308 503 -312 503 -309 b 511 -285 503 -302 504 -297 b 555 -113 540 -227 555 -169 b 544 -34 555 -86 551 -59 b 522 19 540 -16 530 8 l 521 22 l 481 -26 l 405 -122 b 353 -176 366 -172 362 -176 b 349 -176 352 -176 351 -176 b 253 -87 341 -176 347 -180 b 167 0 206 -38 167 0 b 99 -86 167 0 136 -38 b 21 -174 27 -174 28 -173 b 17 -176 20 -176 19 -176 b 6 -174 13 -176 9 -174 b -81 -87 4 -173 -14 -152 b -167 0 -129 -38 -167 0 b -236 -86 -167 0 -198 -38 b -313 -174 -307 -174 -306 -173 b -318 -176 -314 -176 -315 -176 b -328 -174 -321 -176 -325 -174 b -491 -12 -330 -173 -367 -137 l -503 0 l -530 -34 b -570 -77 -562 -73 -564 -76 b -577 -79 -571 -79 -574 -79 b -597 -58 -588 -79 -597 -69 b -596 -49 -597 -55 -597 -52 b -417 172 -593 -43 -423 167 b -413 173 -417 172 -415 173 '
    },
    'stringsDownBow': {
      'x_min': -149.71875,
      'x_max': 148.359375,
      'ha': 151,
      'o': 'm -9 215 b 0 217 -6 217 -4 217 b 19 205 8 217 14 213 b 20 142 20 202 20 201 l 20 84 l 23 84 b 144 -27 81 74 129 30 b 148 -66 147 -40 148 -54 b 36 -213 148 -134 103 -197 b 0 -219 24 -217 12 -219 b -145 -104 -68 -219 -129 -173 b -149 -68 -148 -91 -149 -79 b -24 84 -149 6 -98 74 l -21 84 l -21 142 b -19 205 -20 201 -20 202 b -9 215 -17 209 -13 213 m -21 -15 b -23 41 -21 37 -21 41 b -23 41 -23 41 -23 41 b -76 11 -35 40 -62 26 b -108 -65 -98 -11 -108 -38 b -1 -176 -108 -122 -65 -176 b 107 -65 63 -176 107 -122 b 74 11 107 -38 96 -11 b 20 41 61 26 32 41 b 20 -15 20 41 20 15 b 19 -74 20 -72 20 -72 b 0 -87 14 -83 6 -87 b -19 -74 -8 -87 -16 -83 b -21 -15 -20 -72 -20 -72 '
    },
    'stringsUpBow': {
      'x_min': -149.71875,
      'x_max': 148.359375,
      'ha': 151,
      'o': 'm -137 381 b -130 383 -134 383 -133 383 b -111 371 -122 383 -114 378 b -55 224 -110 370 -85 305 b 0 80 -25 145 -1 80 b 54 224 0 80 24 145 b 112 377 114 384 110 373 b 127 384 118 381 122 384 b 148 362 138 384 148 374 l 148 356 l 83 183 b 16 9 47 88 17 11 b -1 0 12 2 5 0 b -14 5 -5 0 -10 1 b -84 183 -19 9 -13 -6 l -149 356 l -149 362 b -137 381 -149 371 -145 378 '
    },
    'stringsHarmonic': {
      'x_min': -122.5,
      'x_max': 121.140625,
      'ha': 124,
      'o': 'm -16 145 b 0 147 -10 147 -5 147 b 121 -1 66 147 121 77 b 114 -49 121 -16 118 -33 b -1 -148 95 -112 47 -148 b -85 -106 -31 -148 -61 -134 b -122 -1 -110 -76 -122 -38 b -16 145 -122 68 -81 134 m 12 111 b 0 113 8 113 4 113 b -68 22 -29 113 -61 73 b -70 0 -69 15 -70 6 b -13 -113 -70 -49 -47 -98 b -1 -115 -9 -115 -5 -115 b 63 -40 24 -115 53 -83 b 68 -1 66 -27 68 -15 b 12 111 68 48 46 97 '
    },
    'pluckedSnapPizzicatoAbove': {
      'x_min': -149.71875,
      'x_max': 148.359375,
      'ha': 151,
      'o': 'm -9 215 b 0 217 -6 217 -4 217 b 19 205 8 217 14 213 b 20 142 20 202 20 201 l 20 84 l 23 84 b 144 -27 81 74 129 30 b 148 -66 147 -40 148 -54 b 36 -213 148 -134 103 -197 b 0 -219 24 -217 12 -219 b -145 -104 -68 -219 -129 -173 b -149 -68 -148 -91 -149 -79 b -24 84 -149 6 -98 74 l -21 84 l -21 142 b -19 205 -20 201 -20 202 b -9 215 -17 209 -13 213 m -21 -15 b -23 41 -21 37 -21 41 b -23 41 -23 41 -23 41 b -76 11 -35 40 -62 26 b -108 -65 -98 -11 -108 -38 b -1 -176 -108 -122 -65 -176 b 107 -65 63 -176 107 -122 b 74 11 107 -38 96 -11 b 20 41 61 26 32 41 b 20 -15 20 41 20 15 b 19 -74 20 -72 20 -72 b 0 -87 14 -83 6 -87 b -19 -74 -8 -87 -16 -83 b -21 -15 -20 -72 -20 -72 '
    },
    'pluckedSnapPizzicatoBelow': {
      'x_min': -149.71875,
      'x_max': 148.359375,
      'ha': 151,
      'o': 'm -9 215 b 0 217 -6 217 -4 217 b 19 205 8 217 14 213 b 20 142 20 202 20 201 l 20 84 l 23 84 b 144 -27 81 74 129 30 b 148 -66 147 -40 148 -54 b 36 -213 148 -134 103 -197 b 0 -219 24 -217 12 -219 b -145 -104 -68 -219 -129 -173 b -149 -68 -148 -91 -149 -79 b -24 84 -149 6 -98 74 l -21 84 l -21 142 b -19 205 -20 201 -20 202 b -9 215 -17 209 -13 213 m -21 -15 b -23 41 -21 37 -21 41 b -23 41 -23 41 -23 41 b -76 11 -35 40 -62 26 b -108 -65 -98 -11 -108 -38 b -1 -176 -108 -122 -65 -176 b 107 -65 63 -176 107 -122 b 74 11 107 -38 96 -11 b 20 41 61 26 32 41 b 20 -15 20 41 20 15 b 19 -74 20 -72 20 -72 b 0 -87 14 -83 6 -87 b -19 -74 -8 -87 -16 -83 b -21 -15 -20 -72 -20 -72 '
    },
    'pluckedLeftHandPizzicato': {
      'x_min': 0,
      'x_max': 319.859375,
      'ha': 326,
      'o': 'm 149 508 b 159 509 152 509 155 509 b 186 494 170 509 181 503 b 190 440 190 487 190 488 l 190 430 l 190 377 l 242 377 l 251 377 b 303 373 298 377 296 377 b 319 345 314 367 319 356 b 304 319 319 335 314 324 b 250 315 296 315 299 315 l 242 315 l 190 315 l 190 262 l 190 252 b 186 198 190 204 190 205 b 159 183 179 188 170 183 b 132 198 148 183 138 188 b 127 252 127 205 127 204 l 127 262 l 127 315 l 76 315 l 68 315 b 14 319 20 315 21 315 b 0 347 4 324 0 335 b 14 373 0 356 4 367 b 68 377 21 377 20 377 l 76 377 l 127 377 l 127 430 l 127 440 b 132 494 127 488 127 487 b 149 508 136 501 142 505 '
    },
    'keyboardPedalPed': {
      'x_min': -1.359375,
      'x_max': 1064.390625,
      'ha': 1086,
      'o': 'm 296 692 b 314 694 302 694 307 694 b 386 685 337 694 366 689 b 548 498 480 660 548 580 b 548 481 548 492 548 487 b 455 395 541 426 499 395 b 370 462 420 395 383 417 b 362 496 364 477 362 488 b 377 514 362 509 367 514 b 393 501 386 514 390 510 b 432 474 397 484 413 474 b 470 487 445 474 458 478 b 491 530 484 496 491 510 b 490 544 491 534 491 539 b 333 660 479 606 411 657 l 323 662 l 315 646 b 269 524 285 591 269 556 b 321 431 269 492 287 466 b 349 395 338 413 343 408 b 363 342 359 378 363 362 b 359 312 363 333 362 322 b 285 158 348 266 318 206 b 281 152 283 155 281 152 b 281 152 281 152 281 152 b 287 154 283 152 284 152 b 318 155 298 154 308 155 b 461 98 371 155 419 136 l 464 97 l 483 112 b 503 129 494 120 503 127 b 504 130 503 129 504 129 b 503 138 504 131 503 134 b 500 180 500 152 500 166 b 553 326 500 238 518 288 b 604 366 560 331 592 358 b 649 381 617 376 632 381 b 696 362 665 381 681 374 b 724 302 714 347 724 324 b 695 238 724 278 714 255 b 660 210 691 234 662 212 b 579 148 658 209 582 151 b 579 148 579 148 579 148 b 596 106 579 144 589 119 b 622 77 604 88 609 83 b 657 69 632 72 645 69 b 748 112 688 69 721 84 b 755 123 754 117 755 120 b 755 127 755 124 755 126 b 751 165 752 137 751 151 b 758 219 751 183 754 202 b 894 387 774 290 820 347 b 896 390 896 388 896 388 b 891 398 896 391 895 392 b 622 560 827 477 730 535 b 600 580 605 564 600 569 b 617 596 600 591 607 596 b 628 595 622 596 624 596 b 1057 248 846 552 1020 412 b 1064 191 1061 229 1064 209 b 922 0 1064 94 1005 9 b 902 -1 916 -1 909 -1 b 774 76 847 -1 800 26 b 769 83 770 81 770 83 b 769 81 769 83 769 83 b 627 -1 733 29 677 -1 b 548 27 597 -1 570 8 b 515 88 537 37 525 61 l 513 95 l 510 93 l 453 45 b 390 0 396 0 396 0 b 390 0 390 0 390 0 b 374 15 381 0 377 4 b 268 105 359 69 314 105 b 250 104 262 105 257 105 l 243 102 l 234 90 b 155 1 201 49 159 2 b 147 -1 152 0 149 -1 b 130 15 138 -1 130 6 b 132 20 130 18 132 19 b 136 31 133 22 134 27 b 220 131 149 74 178 109 b 231 137 225 134 230 136 b 302 278 280 202 302 244 b 265 335 302 299 295 309 b 209 442 234 363 213 402 b 209 455 209 446 209 451 b 279 648 209 502 232 564 l 285 659 l 283 659 b 176 627 238 653 210 645 b 57 477 111 594 66 538 b 55 459 55 471 55 464 b 72 409 55 437 61 415 b 93 403 78 405 87 403 b 152 467 123 403 151 431 b 168 488 153 483 157 488 b 185 462 181 488 185 483 l 185 460 b 137 344 183 409 168 369 b 78 322 119 328 98 322 b 13 360 50 322 25 335 b -1 426 4 380 -1 402 b 89 610 -1 488 32 559 b 296 692 147 659 210 685 m 926 348 b 921 353 924 351 922 353 b 914 348 920 353 918 351 b 823 167 857 306 823 237 b 828 124 823 154 826 138 b 890 31 837 79 862 40 b 896 31 892 31 894 31 b 956 104 916 31 940 59 b 970 191 965 129 970 159 b 966 241 970 208 969 224 b 926 348 959 277 945 313 m 627 326 b 619 326 624 326 622 326 b 598 316 611 326 604 323 b 568 215 579 288 568 255 b 568 208 568 213 568 210 b 571 183 570 195 570 184 l 571 183 b 594 201 571 183 582 191 l 634 231 b 660 259 653 247 656 248 b 664 278 662 266 664 272 b 627 326 664 299 649 320 '
    },
    'keyboardPedalUp': {
      'x_min': -1.359375,
      'x_max': 592.078125,
      'ha': 604,
      'o': 'm 280 692 b 295 694 283 692 289 694 b 310 692 300 694 307 692 b 357 630 340 684 357 657 b 336 580 357 612 351 594 b 311 538 321 566 311 549 b 352 492 311 512 330 492 b 366 495 357 492 362 492 b 397 553 390 503 397 517 b 415 603 397 576 402 591 b 460 623 427 617 443 623 b 509 599 479 623 498 614 b 522 559 518 587 522 573 b 494 506 522 538 513 519 b 451 495 481 498 473 496 b 415 488 432 495 426 494 b 394 449 404 483 394 464 b 394 448 394 448 394 448 l 394 440 l 397 433 b 428 409 404 420 413 413 b 438 408 431 408 435 408 b 479 431 450 408 462 415 b 528 455 495 448 510 455 b 548 452 534 455 541 453 b 592 391 577 442 592 416 b 549 331 592 365 577 340 b 528 327 541 328 534 327 b 479 351 510 327 495 335 b 438 374 464 367 450 374 b 417 369 431 374 424 373 b 394 333 402 360 394 348 b 400 312 394 326 396 319 b 451 287 408 294 420 288 b 513 258 484 285 499 278 b 522 223 519 247 522 234 b 461 159 522 190 496 159 b 449 161 457 159 453 159 b 397 229 416 167 397 191 b 366 288 397 265 390 278 b 352 290 362 290 357 290 b 315 262 336 290 321 280 b 311 245 313 256 311 251 b 334 204 311 233 318 220 b 355 170 348 190 351 184 b 357 152 356 166 357 159 b 355 136 357 147 356 140 b 295 88 345 104 321 88 b 232 152 264 88 232 112 b 255 204 232 174 238 186 b 279 244 273 222 279 231 l 279 245 b 238 290 279 270 259 290 b 224 288 234 290 228 290 b 193 229 200 278 193 265 b 141 161 193 191 174 167 b 129 159 137 159 133 159 b 68 223 93 159 68 190 b 77 258 68 234 70 247 b 138 287 91 278 106 285 b 185 302 166 287 175 291 b 196 333 193 312 196 323 b 174 369 196 347 187 360 b 152 374 166 373 159 374 b 111 351 140 374 126 367 b 62 327 95 335 80 327 b 51 328 58 327 54 327 b -1 391 16 334 -1 363 b 53 455 -1 420 17 449 b 62 455 57 455 59 455 b 111 431 80 455 95 448 b 152 408 127 415 140 408 b 161 409 155 408 159 408 b 193 433 176 413 186 420 l 196 440 l 196 448 b 196 451 196 449 196 449 b 190 471 196 459 194 463 b 137 495 182 489 167 495 l 134 495 l 134 495 b 68 560 95 495 68 521 b 129 623 68 596 95 623 b 144 621 134 623 138 623 b 193 553 175 614 193 589 b 224 495 193 517 200 503 b 238 492 228 492 234 492 b 279 538 259 492 279 512 b 254 580 279 549 269 566 b 232 630 239 594 232 612 b 280 692 232 657 250 684 m 307 456 b 295 458 303 458 299 458 b 230 391 258 458 230 426 b 236 360 230 381 231 371 b 295 324 249 337 272 324 b 353 360 318 324 341 337 b 360 391 357 370 360 381 b 307 456 360 421 340 451 '
    },
    'pictChokeCymbal': {
      'x_min': 0,
      'x_max': 227.3125,
      'ha': 232,
      'o': 'm 91 213 b 100 215 93 215 96 215 b 227 58 167 215 224 144 b 227 52 227 56 227 54 b 61 -201 227 -43 164 -138 b 29 -216 44 -212 36 -216 b 23 -210 27 -216 24 -213 b 21 -205 21 -208 21 -206 b 34 -192 21 -201 25 -197 b 122 -55 89 -161 122 -106 b 104 6 122 -33 117 -12 l 103 9 l 96 9 b 4 79 57 9 17 38 b 0 112 1 90 0 101 b 91 213 0 163 36 209 '
    },
    'wiggleArpeggiatoUp': {
      '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 '
    },
    'arrowheadBlackUp': {
      'x_min': -10.890625,
      'x_max': 299.4375,
      'ha': 294,
      'o': 'm 136 460 b 142 462 137 462 140 462 b 166 449 152 462 161 456 b 171 428 168 446 168 445 b 288 131 194 322 238 209 b 298 115 295 120 296 117 b 299 106 298 112 299 109 b 273 81 299 91 287 81 b 255 86 268 81 261 83 b 155 116 225 104 183 116 l 152 116 l 149 108 b 141 83 148 102 144 91 b 134 48 137 69 134 58 b 149 9 134 34 140 24 b 153 -1 152 5 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 147 -11 b 122 2 138 -11 133 -6 b 95 61 104 20 95 38 b 107 108 95 74 99 90 b 108 113 107 111 108 112 b 107 113 108 113 108 113 b 102 113 106 113 104 113 b 31 86 76 108 53 98 b 14 80 24 81 20 80 b -10 106 0 80 -10 91 b 0 131 -10 115 -9 116 b 115 430 49 209 91 317 b 136 460 119 451 123 456 '
    },
    'arrowheadBlackDown': {
      'x_min': -10.890625,
      'x_max': 298.078125,
      'ha': 294,
      'o': 'm 138 473 b 142 474 140 473 141 474 b 164 459 148 474 153 470 b 191 402 183 442 191 423 b 181 353 191 388 187 371 b 178 349 179 352 178 349 b 179 348 178 348 179 348 b 185 349 181 348 182 348 b 255 376 210 355 234 363 b 272 381 264 381 266 381 b 298 355 287 381 298 370 b 288 330 298 348 298 345 b 171 34 238 254 194 141 b 166 13 168 16 168 16 b 144 1 161 5 152 1 b 121 15 134 1 125 5 b 115 33 119 18 117 24 b 0 330 91 145 49 252 b -10 355 -9 345 -10 348 b 13 381 -10 371 0 381 b 31 376 19 381 25 380 b 132 345 61 358 103 345 l 136 345 l 137 355 b 145 378 138 359 142 370 b 152 415 149 394 152 405 b 137 452 152 427 148 438 b 133 464 134 458 133 460 b 138 473 133 467 134 470 '
    },
    '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 '
    },
    '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 '
    },
    'vexNoteHeadMutedBreve': {
      'x_min': 0,
      'x_max': 370.21875,
      'ha': 378,
      'o': 'm 0 0 l 0 277 l 61 277 l 122 277 l 122 0 l 122 -278 l 61 -278 l 0 -278 l 0 0 m 246 -1 l 246 277 l 308 277 l 370 277 l 370 -1 l 370 -278 l 308 -278 l 246 -278 l 246 -1 '
    }
  },
  'cssFontWeight': 'normal',
  'ascender': 1903,
  'underlinePosition': -125,
  'cssFontStyle': 'normal',
  'boundingBox': {
    'yMin': -2065.375,
    'xMin': -695.53125,
    'yMax': 1901.578125,
    'xMax': 1159.671875
  },
  'resolution': 1000,
  'original_font_information': {
    'postscript_name': 'Gonville-18',
    'version_string': 'Version 0.1.8904 ',
    'vendor_url': '',
    'full_font_name': 'Gonville-18',
    'font_family_name': 'Gonville-18',
    'copyright': 'No copyright is claimed on this font file.',
    'description': '',
    'trademark': '',
    'designer': '',
    'designer_url': '',
    'unique_font_identifier': 'FontForge 2.0 : Gonville-18 : 17-3-2010',
    'license_url': '',
    'license_description': '',
    'manufacturer_name': '',
    'font_sub_family_name': '18'
  },
  'descender': -2066,
  'familyName': 'Gonville-18',
  'lineHeight': 4093,
  'underlineThickness': 50
};

/***/ }),

/***/ "./src/fonts/gonville_metrics.js":
/*!***************************************!*\
  !*** ./src/fonts/gonville_metrics.js ***!
  \***************************************/
/*! exports provided: GonvilleMetrics */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GonvilleMetrics", function() { return GonvilleMetrics; });
var GonvilleMetrics = {
  name: 'Gonville',
  smufl: false,
  stave: {
    padding: 12
  },
  clef: {
    'default': {
      point: 40,
      width: 26
    },
    'small': {
      point: 32,
      width: 20
    },
    annotations: {
      '8va': {
        smuflCode: 'timeSig8',
        "default": {
          point: 20,
          treble: {
            line: -1.2,
            shiftX: 11
          }
        },
        small: {
          point: 18,
          treble: {
            line: -0.4,
            shiftX: 8
          }
        }
      },
      '8vb': {
        smuflCode: 'timeSig8',
        "default": {
          point: 20,
          treble: {
            line: 6.3,
            shiftX: 10
          },
          bass: {
            line: 4,
            shiftX: 1
          }
        },
        small: {
          point: 18,
          treble: {
            line: 5.8,
            shiftX: 6
          },
          bass: {
            line: 3.5,
            shiftX: 0.5
          }
        }
      }
    },
    // May not need these anymore
    lineCount: {
      '8': {
        point: 55,
        shiftY: 14
      },
      '7': {
        point: 47,
        shiftY: 8
      },
      '6': {
        point: 40,
        shiftY: 1
      },
      '5': {
        point: 30,
        shiftY: -6
      },
      '4': {
        point: 23,
        shiftY: -12
      }
    }
  },
  pedalMarking: {
    up: {
      point: 40
    },
    down: {
      point: 40
    }
  },
  tremolo: {
    "default": {
      point: 40,
      spacing: 4,
      offsetYStemUp: -9,
      offsetYStemDown: -21,
      offsetXStemUp: 6,
      offsetXStemDown: -2
    },
    grace: {
      point: 30,
      spacing: 4,
      offsetYStemUp: -9,
      offsetYStemDown: -21,
      offsetXStemUp: 6,
      offsetXStemDown: -2
    }
  },
  // These are for numeric digits, such as in time signatures
  digits: {
    point: 40,
    tupletPoint: 28
  },
  stem: {
    // 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
      },
      noteheadBlack: {
        offsetYBaseStemDown: 2
      },
      noteheadSquareWhite: {
        offsetYBaseStemDown: -5,
        offsetYBaseStemUp: 5
      }
    }
  },
  glyphs: {
    textNote: {
      point: 40,
      "default": {},
      ornamentTrill: {
        shiftX: -5,
        shiftY: 4
      }
    },
    noteHead: {
      custom: {
        'noteheadDiamondWholeStemUp': {
          shiftX: -6
        },
        'noteheadCircleXStemUp': {
          shiftX: -1.5
        },
        'noteheadXWholeStemUp': {
          shiftX: -5
        },
        'noteheadTriangleUpWholeStemUp': {
          shiftX: -6
        }
      }
    }
  }
};

/***/ }),

/***/ "./src/fonts/petaluma_glyphs.js":
/*!**************************************!*\
  !*** ./src/fonts/petaluma_glyphs.js ***!
  \**************************************/
/*! exports provided: PetalumaFont */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PetalumaFont", function() { return PetalumaFont; });
var 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.036101509664164,
      'y_min': 876.905249806889,
      'y_max': 1121.5430338167066,
      'ha': 244.63778400981766,
      '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 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 b 251 350 246 350 249 350 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'
    },
    '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 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 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 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'
    },
    '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 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 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 569 -131 l 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 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'
    },
    'cClef': {
      'x_min': 0,
      'x_max': 731,
      'y_min': -543,
      'y_max': 543,
      'ha': 1086,
      'o': '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 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'
    },
    '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 b 213 -541 275 -541 245 -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 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 b 972 -281 971 -281 971 -281 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 b 1018 92 1011 91 1015 92 z'
    },
    'unpitchedPercussionClef1': {
      'x_min': 0,
      'x_max': 379.13761966945304,
      'y_min': -250,
      'y_max': 250,
      'ha': 500,
      'o': '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 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'
    },
    '6stringTabClef': {
      'x_min': 0,
      'x_max': 438,
      'y_min': -768,
      'y_max': 767,
      'ha': 1535,
      'o': '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 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 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 b 282 -287 291 -287 287 -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 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 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 b 272 965 272 972 272 969 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'
    },
    'timeSig0': {
      'x_min': 20,
      'x_max': 513,
      'y_min': -358.159536277652,
      'y_max': 359,
      'ha': 717.159536277652,
      '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.4636303241031,
      'y_min': -378.7201231608281,
      'y_max': 382,
      'ha': 760.720123160828,
      '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': 19.824321427094187,
      '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.0785282750762,
      'y_min': -489.59088556716864,
      'y_max': 491.18559127100053,
      'ha': 980.7764768381692,
      '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': 19.663871085403297,
      '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.3617407597707,
      '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.15101530718516,
      '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 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 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 b 530 327 530 330 530 328 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'
    },
    '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.49658092772603,
      'ha': 592.496580927726,
      '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.0379164869064,
      'y_max': 687,
      'ha': 1374.0379164869064,
      '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 b 539 -422 524 -428 531 -425 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'
    },
    'noteheadDoubleWhole': {
      'x_min': -0.4444444444444444,
      'x_max': 614.1875,
      'y_min': -223.03296670127517,
      'y_max': 223,
      'ha': 446.0329667012752,
      'o': '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 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 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 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 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 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'
    },
    'noteheadWhole': {
      'x_min': 0,
      'x_max': 380.16649762501584,
      'y_min': -186.17102907059297,
      'y_max': 165,
      'ha': 351.17102907059297,
      '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.04644433966797,
      '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'
    },
    'noteheadXWhole': {
      'x_min': 0,
      'x_max': 506,
      'y_min': -143.0823320899293,
      'y_max': 144,
      'ha': 287.0823320899293,
      '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 b 485 4 497 -4 491 0 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 b 164 -143 305 -53 235 -98 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 b 196 121 284 58 239 89 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 b 372 27 243 120 307 73 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': -145.51844828189743,
      'y_max': 151,
      'ha': 296.51844828189746,
      '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 b 406 -19 533 -135 469 -78 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 b 213 -202 203 -202 207 -202 b 262 -180 228 -202 246 -199 b 314 -122 279 -161 297 -141 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 b 124 117 135 105 130 111 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 b 408 -210 405 -210 406 -210 b 416 -192 416 -207 416 -199 b 416 -186 416 -190 416 -187 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'
    },
    'noteheadCircleX': {
      'x_min': 0,
      'x_max': 344,
      'y_min': -179,
      'y_max': 175.12551922594866,
      'ha': 354.12551922594866,
      '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 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 m 245 42 b 124 156 204 79 164 118 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 405 -112 l 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'
    },
    'noteheadTriangleUpWhole': {
      'x_min': 0,
      'x_max': 366,
      'y_min': -145,
      'y_max': 138,
      'ha': 283,
      'o': 'm 55 -209 l 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.0833130378007,
      '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 278 -170 l 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 b 357 -22 320 48 338 13 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'
    },
    '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'
    },
    '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 b 503 -135 503 -137 503 -137 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 -127 l 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 z'
    },
    'noteheadSquareBlack': {
      'x_min': 0,
      'x_max': 342,
      'y_min': -129.98961937716263,
      'y_max': 132.44444444444446,
      'ha': 262.4340638216071,
      '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 b 1 156 1 71 1 114 b 36 190 3 187 4 190 b 217 190 102 192 168 190 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.19381479578487,
      '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.1591498636094,
      'y_min': -819.3972596310256,
      'y_max': 0,
      'ha': 819.3972596310256,
      '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.1591498636094,
      '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 b 415 1179 418 1179 416 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 b 0 88 0 148 0 108 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.19862981551275186,
      'x_max': 268.0942440943661,
      'y_min': -849.4710740978672,
      'y_max': 149.0769891455102,
      'ha': 998.5480632433774,
      '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 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 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'
    },
    'flag32ndDown': {
      'x_min': -2.800802874905624,
      'x_max': 268.09424409436605,
      'y_min': -169.07698914551014,
      'y_max': 829.4710740978672,
      'ha': 998.5480632433773,
      '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 b 0 -148 0 -42 0 -94 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': -823.5430338167067,
      'y_max': 347,
      'ha': 1170.5430338167066,
      '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 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 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 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'
    },
    'flag64thDown': {
      'x_min': -5,
      'x_max': 281,
      'y_min': -375,
      'y_max': 795.5430338167066,
      'ha': 1170.5430338167066,
      '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 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 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 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 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z'
    },
    'flag128thDown': {
      'x_min': -0.8888888888888888,
      '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': 213.5,
      '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 -81 l 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 b 523 -78 524 -78 524 -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 b 533 315 534 315 534 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 b 347 552 348 552 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 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 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'
    },
    'accidentalParensLeft': {
      'x_min': 0,
      'x_max': 130.18934911242604,
      'y_min': -270,
      'y_max': 267.6082500723851,
      'ha': 537.6082500723851,
      '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.4444444444444445,
      '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 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 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 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 b 35 66 29 66 32 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 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 m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 b 300 108 300 69 300 88 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z'
    },
    'accidentalBuyukMucennebFlat': {
      'x_min': 1.8692317181955784,
      'x_max': 287,
      'y_min': -248,
      'y_max': 432.4720949426819,
      'ha': 680.4720949426819,
      '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 b 197 251 197 246 197 248 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 b 203 431 203 416 203 423 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 b 203 556 300 596 251 576 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 b 29 315 107 347 68 331 b 3 281 12 310 3 298 b 12 170 1 245 9 209 b 141 226 55 189 98 207 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': 1.8692317181955784,
      '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 b 35 66 29 66 32 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.15206251809627475,
      '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.4598053473055,
      'y_max': 180,
      'ha': 642.4598053473055,
      '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 b 69 -600 69 -615 69 -608 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 -118 l 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 b 369 428 369 433 369 431 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 b 137 392 137 399 137 396 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 -36 l 419 49 l 526 7 l 485 -10 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 b 0 9 0 12 0 10 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 16 -469 l 26 -469 b 27 -469 27 -469 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 b 0 -461 0 -458 0 -459 b 16 -469 3 -468 10 -469 z'
    },
    'articTenutoAbove': {
      'x_min': 0.35192668236256364,
      'x_max': 471.1238660564107,
      '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.35192668236256364,
      'x_max': 471.1238660564107,
      '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.4151102965496913,
      '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.4151102965496913,
      'x_max': 112.08403222864916,
      '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 96 0 l 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.04121419527862119,
      'x_max': 396,
      'y_min': 0,
      'y_max': 328.0000000000001,
      'ha': 328.0000000000001,
      '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': 395.9587858047214,
      'y_min': -328.0000000000001,
      'y_max': 0,
      'ha': 328.0000000000001,
      '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.04550444040404433,
      'x_max': 472,
      'y_min': 2.015071727506986,
      'y_max': 454,
      'ha': 451.984928272493,
      '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.310835055998654,
      'x_max': 518.570567335755,
      'y_min': -430,
      'y_max': -0.9161449836506543,
      'ha': 429.08385501634933,
      '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'
    },
    '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': 565.5831864753837,
      'y_min': -0.09016994374947417,
      'y_max': 562.4481112129314,
      'ha': 562.5382811566809,
      'o': '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 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'
    },
    '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': 0.8908513171538642,
      'x_max': 500,
      'y_min': -120,
      'y_max': 14,
      'ha': 134,
      'o': 'm 76 -173 l 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'
    },
    'restHalf': {
      'x_min': 0,
      'x_max': 518.3998530468286,
      'y_min': 0,
      'y_max': 162,
      'ha': 162,
      'o': 'm 98 0 l 446 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'
    },
    'restQuarter': {
      'x_min': -0.3784452492533808,
      '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.283950617284,
      'y_max': 244,
      'ha': 572.2839506172841,
      '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': -497.5023916875033,
      'y_max': 483,
      'ha': 980.5023916875033,
      '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': 473.6797408388932,
      'ha': 1193.6797408388932,
      '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 b 118 -196 118 -150 118 -173 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': 0.6717818579024267,
      '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 b 184 -436 184 -441 184 -438 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': 326.5019318364244,
      '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 b -26 379 -26 382 -26 380 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.30112136775,
      'y_min': -115.3876295915697,
      'y_max': 504,
      'ha': 619.3876295915697,
      '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 b 63 344 22 344 43 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.0960720195126,
      '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': -42.73880183193087,
      '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 269 -17 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 b 264 148 282 167 274 158 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 b 312 462 307 462 310 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 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 b 3 461 3 448 3 452 b 53 432 0 438 19 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 z m 549 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 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 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.17691453624,
      '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.11067192132025548,
      'x_max': 1066,
      'y_min': -50,
      'y_max': 533.1706452421108,
      'ha': 583.1706452421108,
      '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.0302860502196,
      'ha': 326.0302860502196,
      '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'
    },
    'stringsDownBow': {
      'x_min': 0,
      'x_max': 306,
      'y_min': -0.09607201951262866,
      'y_max': 366,
      'ha': 366.09607201951263,
      '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.2842808242076,
      'y_min': 0,
      'y_max': 489,
      'ha': 489,
      'o': 'm 150 0 l 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 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 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 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 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 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': 436.6015132318337,
      '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'
    },
    'arrowheadBlackUp': {
      'x_min': 186,
      'x_max': 820,
      'y_min': -1000,
      'y_max': 1000,
      'ha': 2000,
      'o': 'm 1181 1440 l 268 1440 l 268 -1440 l 1181 -1440 z m 959 -524 l 959 -850 l 481 -850 l 481 -524 z m 864 -619 l 576 -619 l 576 -755 l 864 -755 z m 959 -26 l 959 -351 l 481 -351 l 481 -26 l 576 -26 l 576 -256 l 864 -256 l 864 -121 l 769 -121 l 769 -187 l 671 -187 l 671 -26 z m 959 325 l 959 37 l 481 37 l 481 135 l 864 135 l 864 325 z m 959 498 l 959 403 l 769 403 l 769 202 l 481 202 l 481 297 l 671 297 l 671 403 l 481 403 l 481 498 z m 671 778 l 576 778 l 576 674 l 671 674 z m 769 876 l 769 674 l 959 674 l 959 576 l 481 576 l 481 876 z m 959 1247 l 959 1152 l 769 1152 l 769 1045 l 959 1045 l 959 950 l 481 950 l 481 1045 l 671 1045 l 671 1152 l 484 1152 l 484 1247 z m 959 -916 l 959 -1011 l 867 -1011 l 665 -1146 l 959 -1146 l 959 -1241 l 481 -1241 l 481 -1146 l 683 -1011 l 481 -1011 l 481 -916 z'
    },
    'arrowheadBlackDown': {
      'x_min': 186,
      'x_max': 820,
      'y_min': -1000,
      'y_max': 1000,
      'ha': 2000,
      'o': 'm 1181 1440 l 268 1440 l 268 -1440 l 1181 -1440 z m 959 -524 l 959 -850 l 481 -850 l 481 -524 z m 864 -619 l 576 -619 l 576 -755 l 864 -755 z m 959 -26 l 959 -351 l 481 -351 l 481 -26 l 576 -26 l 576 -256 l 864 -256 l 864 -121 l 769 -121 l 769 -187 l 671 -187 l 671 -26 z m 959 325 l 959 37 l 481 37 l 481 135 l 864 135 l 864 325 z m 959 498 l 959 403 l 769 403 l 769 202 l 481 202 l 481 297 l 671 297 l 671 403 l 481 403 l 481 498 z m 671 778 l 576 778 l 576 674 l 671 674 z m 769 876 l 769 674 l 959 674 l 959 576 l 481 576 l 481 876 z m 959 1247 l 959 1152 l 769 1152 l 769 1045 l 959 1045 l 959 950 l 481 950 l 481 1045 l 671 1045 l 671 1152 l 484 1152 l 484 1247 z m 959 -916 l 959 -1011 l 867 -1011 l 665 -1146 l 959 -1146 l 959 -1241 l 481 -1241 l 481 -1146 l 683 -1011 l 481 -1011 l 481 -916 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.1057280164835,
      'y_min': -250,
      'y_max': 175,
      'ha': 425,
      'o': '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 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 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.008571918423331715,
      'x_max': 775,
      'y_min': -246.92374029115243,
      'y_max': 362.82068246705313,
      'ha': 609.7444227582056,
      'o': 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 b 91 -179 321 -26 206 -102 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 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 b 924 -153 973 -192 949 -171 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 m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 b 233 269 262 246 248 258 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'
    },
    'repeat4Bars': {
      'x_min': 0,
      'x_max': 1374,
      'y_min': -304,
      'y_max': 304,
      'ha': 608,
      'o': '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 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 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 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.19160170741762,
      'y_max': 265.12618221237005,
      'ha': 490.31778391978764,
      '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'
    }
  },
  'fontFamily': 'Petaluma',
  'resolution': 1000,
  'generatedOn': '2020-04-13T11:57:51.948Z'
};

/***/ }),

/***/ "./src/fonts/petaluma_metrics.js":
/*!***************************************!*\
  !*** ./src/fonts/petaluma_metrics.js ***!
  \***************************************/
/*! exports provided: PetalumaMetrics */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PetalumaMetrics", function() { return PetalumaMetrics; });
var PetalumaMetrics = {
  name: 'Petaluma',
  smufl: true,
  stave: {
    padding: 15
  },
  clef: {
    "default": {
      point: 32,
      width: 26
    },
    small: {
      point: 26,
      width: 20
    },
    annotations: {
      '8va': {
        smuflCode: 'timeSig8',
        "default": {
          point: 18,
          treble: {
            line: -1.4,
            shiftX: 12
          }
        },
        small: {
          point: 16,
          treble: {
            line: -0.2,
            shiftX: 8
          }
        }
      },
      '8vb': {
        smuflCode: 'timeSig8',
        "default": {
          point: 18,
          treble: {
            line: 6,
            shiftX: 10
          },
          bass: {
            line: 3.5,
            shiftX: 1
          }
        },
        small: {
          point: 16,
          treble: {
            line: 5.3,
            shiftX: 6
          },
          bass: {
            line: 3.1,
            shiftX: 0.5
          }
        }
      }
    },
    // These may no longer be necessary
    lineCount: {
      '8': {
        point: 55,
        shiftY: 14
      },
      '7': {
        point: 47,
        shiftY: 8
      },
      '6': {
        point: 32,
        shiftY: 1
      },
      '5': {
        point: 30,
        shiftY: -6
      },
      '4': {
        point: 23,
        shiftY: -12
      }
    }
  },
  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: 11,
      offsetXStemDown: 1
    },
    grace: {
      point: 18,
      spacing: 4,
      offsetYStemUp: -5,
      offsetYStemDown: 5,
      offsetXStemUp: 7,
      offsetXStemDown: 1
    }
  },
  noteHead: {
    displaced: {
      shiftX: -2
    }
  },
  stem: {
    // 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
      },
      noteheadBlack: {
        offsetYBaseStemDown: 2,
        offsetYBaseStemUp: -2
      },
      noteheadSquareWhite: {
        offsetYBaseStemDown: -5,
        offsetYBaseStemUp: 5
      }
    }
  },
  // 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,
      tabStem: {
        shiftX: -1.75
      },
      staveTempo: {
        shiftX: -1
      }
    },
    clef: {
      gClef: {
        "default": {
          scale: 1.1,
          shiftY: 1
        },
        small: {
          shiftY: 1.5
        }
      },
      fClef: {
        "default": {
          shiftY: -0.5
        }
      }
    },
    ornament: {
      ornamentTurn: {
        scale: 1.2
      },
      ornamentTurnSlash: {
        scale: 1.2
      }
    },
    stroke: {
      arrowheadBlackDown: {
        straight: {
          shiftX: -4.5
        },
        wiggly: {
          shiftX: -1,
          shiftY: 1
        }
      },
      arrowheadBlackUp: {
        straight: {
          shiftX: -0.85
        },
        wiggly: {
          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: {
      standard: {
        noteheadBlackStemUp: {
          shiftX: 1.5,
          point: 34
        },
        noteheadBlackStemDown: {
          point: 34
        },
        noteheadHalfStemUp: {
          shiftX: 1,
          point: 34
        },
        noteheadHalfStemDown: {
          point: 34
        },
        noteheadWholeStemUp: {
          shiftX: 1,
          point: 34
        },
        noteheadWholeStemDown: {
          point: 34
        },
        restQuarterStemUp: {
          point: 35
        },
        restQuarterStemDown: {
          point: 35
        }
      },
      custom: {
        'noteheadCircleXStemUp': {
          shiftX: -1
        },
        'noteheadCircleXStemDown': {
          shiftX: 0.25
        },
        'noteheadDiamondHalfStemUp': {
          shiftX: 1.5
        },
        'noteheadDiamondBlackStemUp': {
          shiftX: 1.5
        },
        'noteheadDiamondWholeStemUp': {
          shiftX: 1
        },
        'noteheadXBlackStemUp': {
          shiftX: 1
        },
        'noteheadXHalfStemUp': {
          shiftX: -3
        },
        'noteheadXHalfStemDown': {
          shiftX: 1
        },
        'noteheadXWholeStemUp': {
          shiftX: -7
        },
        'noteheadXWholeStemDown': {
          shiftX: 1
        },
        'noteheadSquareWhiteStemDown': {
          shiftX: 0.25
        },
        'noteheadSquareWhiteStemUp': {
          shiftX: -0.75
        },
        'noteheadSquareBlackStemUp': {
          shiftX: -0.75
        },
        'noteheadTriangleUpWholeStemUp': {
          shiftX: -0.75
        }
      }
    }
  }
};

/***/ }),

/***/ "./src/formatter.js":
/*!**************************!*\
  !*** ./src/formatter.js ***!
  \**************************/
/*! exports provided: Formatter */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Formatter", function() { return Formatter; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./beam */ "./src/beam.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fraction */ "./src/fraction.js");
/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./voice */ "./src/voice.js");
/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.js");
/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.js");
/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.js");
/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
//
// This file 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.js` for usage examples. The helper functions included
// here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.








 // To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (Formatter.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.Formatter', args);
} // Helper function to locate the next non-rest note(s).


function lookAhead(notes, restLine, i, compare) {
  // If no valid next note group, nextRestLine is same as current.
  var nextRestLine = restLine; // Get the rest line for next valid non-rest note group.

  for (i += 1; i < notes.length; i += 1) {
    var note = notes[i];

    if (!note.isRest() && !note.shouldIgnoreTicks()) {
      nextRestLine = note.getLineForRest();
      break;
    }
  } // Locate the mid point between two lines.


  if (compare && restLine !== nextRestLine) {
    var top = Math.max(restLine, nextRestLine);
    var bot = Math.min(restLine, nextRestLine);
    nextRestLine = _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].MidLine(top, bot);
  }

  return nextRestLine;
} // Take an array of `voices` and place aligned tickables in the same context. Returns
// a mapping from `tick` to `ContextType`, a list of `tick`s, and the resolution
// multiplier.
//
// Params:
// * `voices`: Array of `Voice` instances.
// * `ContextType`: A context class (e.g., `ModifierContext`, `TickContext`)
// * `addToContext`: Function to add tickable to context.


function createContexts(voices, ContextType, addToContext) {
  if (!voices || !voices.length) {
    throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArgument', 'No voices to format');
  } // Find out highest common multiple of resolution multipliers.
  // The purpose of this is to find out a common denominator
  // for all fractional tick values in all tickables of all voices,
  // so that the values can be expanded and the numerator used
  // as an integer tick value.


  var totalTicks = voices[0].getTotalTicks();
  var resolutionMultiplier = voices.reduce(function (resolutionMultiplier, voice) {
    if (!voice.getTotalTicks().equals(totalTicks)) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('TickMismatch', 'Voices should have same total note duration in ticks.');
    }

    if (voice.getMode() === _voice__WEBPACK_IMPORTED_MODULE_4__["Voice"].Mode.STRICT && !voice.isComplete()) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('IncompleteVoice', 'Voice does not have enough notes.');
    }

    return Math.max(resolutionMultiplier, _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"].LCM(resolutionMultiplier, voice.getResolutionMultiplier()));
  }, 1); // Initialize tick maps.

  var tickToContextMap = {};
  var tickList = [];
  var contexts = []; // For each voice, extract notes and create a context for every
  // new tick that hasn't been seen before.

  voices.forEach(function (voice, voiceIndex) {
    // Use resolution multiplier as denominator to expand ticks
    // to suitable integer values, so that no additional expansion
    // of fractional tick values is needed.
    var ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"](0, resolutionMultiplier);
    voice.getTickables().forEach(function (tickable) {
      var integerTicks = ticksUsed.numerator; // If we have no tick context for this tick, create one.

      if (!tickToContextMap[integerTicks]) {
        var newContext = new ContextType({
          tickID: integerTicks
        });
        contexts.push(newContext);
        tickToContextMap[integerTicks] = newContext;
      } // Add this tickable to the TickContext.


      addToContext(tickable, tickToContextMap[integerTicks], voiceIndex); // Maintain a sorted list of tick contexts.

      tickList.push(integerTicks);
      ticksUsed.add(tickable.getTicks());
    });
  });
  return {
    map: tickToContextMap,
    array: contexts,
    list: _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].SortAndUnique(tickList, function (a, b) {
      return a - b;
    }, function (a, b) {
      return a === b;
    }),
    resolutionMultiplier: resolutionMultiplier
  };
}

var Formatter =
/*#__PURE__*/
function () {
  _createClass(Formatter, null, [{
    key: "SimpleFormat",
    // Helper function to layout "notes" one after the other without
    // regard for proportions. Useful for tests and debugging.
    value: function SimpleFormat(notes) {
      var x = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;

      var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
          _ref$paddingBetween = _ref.paddingBetween,
          paddingBetween = _ref$paddingBetween === void 0 ? 10 : _ref$paddingBetween;

      notes.reduce(function (x, note) {
        note.addToModifierContext(new _modifiercontext__WEBPACK_IMPORTED_MODULE_7__["ModifierContext"]());
        var tick = new _tickcontext__WEBPACK_IMPORTED_MODULE_8__["TickContext"]().addTickable(note).preFormat();
        var metrics = tick.getMetrics();
        tick.setX(x + metrics.totalLeftPx);
        return x + tick.getWidth() + metrics.totalRightPx + paddingBetween;
      }, x);
    } // Helper function to plot formatter debug info.

  }, {
    key: "plotDebugging",
    value: function plotDebugging(ctx, formatter, xPos, y1, y2, options) {
      options = _objectSpread({
        stavePadding: _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.DEFAULT_FONT_STACK[0].lookupMetric('stave.padding')
      }, options);
      var x = xPos + options.stavePadding;
      var 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('Arial', 8, '');
      contextGaps.gaps.forEach(function (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), x + gap.x1, y2 + 12);
      });
      ctx.setFillStyle('red');
      ctx.fillText("Loss: ".concat((formatter.totalCost || 0).toFixed(2), " Shift: ").concat((formatter.totalShift || 0).toFixed(2), " Gap: ").concat(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.
    //
    // Parameters:
    // * `ctx` - The rendering context
    // * `stave` - The stave to which to draw (`Stave` or `TabStave`)
    // * `notes` - Array of `Note` instances (`StaveNote`, `TextNote`, `TabNote`, etc.)
    // * `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.

  }, {
    key: "FormatAndDraw",
    value: function FormatAndDraw(ctx, stave, notes, params) {
      var options = {
        auto_beam: false,
        align_rests: false
      };

      if (_typeof(params) === 'object') {
        _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(options, params);
      } else if (typeof params === 'boolean') {
        options.auto_beam = params;
      } // Start by creating a voice and adding all the notes to it.


      var voice = new _voice__WEBPACK_IMPORTED_MODULE_4__["Voice"](_tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_4__["Voice"].Mode.SOFT).addTickables(notes); // Then create beams, if requested.

      var beams = options.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_1__["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: stave
      }); // Render the voice and beams to the stave.

      voice.setStave(stave).draw(ctx, stave);
      beams.forEach(function (beam) {
        return 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.
    //
    // Parameters:
    // * `ctx` - The rendering context
    // * `tabstave` - A `TabStave` instance on which to render `TabNote`s.
    // * `stave` - A `Stave` instance on which to render `Note`s.
    // * `notes` - Array of `Note` instances for the stave (`StaveNote`, `BarNote`, etc.)
    // * `tabnotes` - Array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)
    // * `autobeam` - Automatically generate beams.
    // * `params` - A configuration object:
    //    * `autobeam` automatically generates beams for the notes.
    //    * `align_rests` aligns rests with nearby notes.

  }, {
    key: "FormatAndDrawTab",
    value: function FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {
      var opts = {
        auto_beam: autobeam,
        align_rests: false
      };

      if (_typeof(params) === 'object') {
        _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(opts, params);
      } else if (typeof params === 'boolean') {
        opts.auto_beam = params;
      } // Create a `4/4` voice for `notes`.


      var notevoice = new _voice__WEBPACK_IMPORTED_MODULE_4__["Voice"](_tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_4__["Voice"].Mode.SOFT).addTickables(notes); // Create a `4/4` voice for `tabnotes`.

      var tabvoice = new _voice__WEBPACK_IMPORTED_MODULE_4__["Voice"](_tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].TIME4_4).setMode(_voice__WEBPACK_IMPORTED_MODULE_4__["Voice"].Mode.SOFT).addTickables(tabnotes); // Then create beams, if requested.

      var beams = opts.auto_beam ? _beam__WEBPACK_IMPORTED_MODULE_1__["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(function (beam) {
        return beam.setContext(ctx).draw();
      }); // Draw a connector between tab and note staves.

      new _staveconnector__WEBPACK_IMPORTED_MODULE_5__["StaveConnector"](stave, tabstave).setContext(ctx).draw();
    } // Auto position rests based on previous/next note positions.
    //
    // Params:
    // * `notes`: An array of notes.
    // * `alignAllNotes`: If set to false, only aligns non-beamed notes.
    // * `alignTuplets`: If set to false, ignores tuplets.

  }, {
    key: "AlignRestsToNotes",
    value: function AlignRestsToNotes(notes, alignAllNotes, alignTuplets) {
      notes.forEach(function (note, index) {
        if (note instanceof _stavenote__WEBPACK_IMPORTED_MODULE_6__["StaveNote"] && note.isRest()) {
          if (note.tuplet && !alignTuplets) return; // If activated rests not on default can be rendered as specified.

          var position = note.getGlyph().position.toUpperCase();
          if (position !== 'R/4' && position !== 'B/4') return;

          if (alignAllNotes || note.beam != null) {
            // Align rests with previous/next notes.
            var props = note.getKeyProps()[0];

            if (index === 0) {
              props.line = lookAhead(notes, props.line, index, false);
              note.setKeyLine(0, props.line);
            } else if (index > 0 && index < notes.length) {
              // If previous note is a rest, use its line number.
              var restLine;

              if (notes[index - 1].isRest()) {
                restLine = notes[index - 1].getKeyProps()[0].line;
                props.line = restLine;
              } else {
                restLine = notes[index - 1].getLineForRest(); // Get the rest line for next valid non-rest note group.

                props.line = lookAhead(notes, restLine, index, true);
              }

              note.setKeyLine(0, props.line);
            }
          }
        }
      });
      return this;
    }
  }]);

  function Formatter(options) {
    _classCallCheck(this, Formatter);

    this.options = _objectSpread({
      softmaxFactor: null,
      maxIterations: 2
    }, options); // 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; // Total number of ticks in the voice.

    this.totalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"](0, 1); // Arrays of tick and modifier contexts.

    this.tickContexts = null;
    this.modiferContexts = null; // Gaps between contexts, for free movement of notes post
    // formatting.

    this.contextGaps = {
      total: 0,
      gaps: []
    };
    this.voices = [];
    this.iterationsCompleted = 0;
    this.lossHistory = [];
  } // Find all the rests in each of the `voices` and align them
  // to neighboring notes. If `alignAllNotes` is `false`, then only
  // align non-beamed notes.


  _createClass(Formatter, [{
    key: "alignRests",
    value: function alignRests(voices, alignAllNotes) {
      if (!voices || !voices.length) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArgument', 'No voices to format rests');
      }

      voices.forEach(function (voice) {
        return Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes);
      });
    } // Calculate the minimum width required to align and format `voices`.

  }, {
    key: "preCalculateMinTotalWidth",
    value: function preCalculateMinTotalWidth(voices) {
      // Cache results.
      if (this.hasMinTotalWidth) return this.minTotalWidth; // Create tick contexts if not already created.

      if (!this.tickContexts) {
        if (!voices) {
          throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArgument', "'voices' required to run preCalculateMinTotalWidth");
        }

        this.createTickContexts(voices);
      }

      var _this$tickContexts = this.tickContexts,
          contextList = _this$tickContexts.list,
          contextMap = _this$tickContexts.map; // Go through each tick context and calculate total width.

      this.minTotalWidth = contextList.map(function (tick) {
        var context = contextMap[tick];
        context.preFormat();
        return context.getWidth();
      }).reduce(function (a, b) {
        return a + b;
      }, 0);
      this.hasMinTotalWidth = true;
      return this.minTotalWidth;
    } // Get minimum width required to render all voices. Either `format` or
    // `preCalculateMinTotalWidth` must be called before this method.

  }, {
    key: "getMinTotalWidth",
    value: function getMinTotalWidth() {
      if (!this.hasMinTotalWidth) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoMinTotalWidth', "Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'");
      }

      return this.minTotalWidth;
    } // Create `ModifierContext`s for each tick in `voices`.

  }, {
    key: "createModifierContexts",
    value: function createModifierContexts(voices) {
      var contexts = createContexts(voices, _modifiercontext__WEBPACK_IMPORTED_MODULE_7__["ModifierContext"], function (tickable, context) {
        return tickable.addToModifierContext(context);
      });
      this.modiferContexts = contexts;
      return contexts;
    } // Create `TickContext`s for each tick in `voices`. Also calculate the
    // total number of ticks in voices.

  }, {
    key: "createTickContexts",
    value: function createTickContexts(voices) {
      var contexts = createContexts(voices, _tickcontext__WEBPACK_IMPORTED_MODULE_8__["TickContext"], function (tickable, context, voiceIndex) {
        return context.addTickable(tickable, voiceIndex);
      });
      contexts.array.forEach(function (context) {
        context.tContexts = contexts.array;
      });
      this.totalTicks = voices[0].getTicksUsed().clone();
      this.tickContexts = contexts;
      return contexts;
    } // This is the core formatter logic. Format voices and justify them
    // to `justifyWidth` pixels. `renderingContext` is required to justify elements
    // that can't retreive widths without a canvas. This method sets the `x` positions
    // of all the tickables/notes in the formatter.

  }, {
    key: "preFormat",
    value: function preFormat() {
      var _this = this;

      var justifyWidth = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
      var renderingContext = arguments.length > 1 ? arguments[1] : undefined;
      var voices = arguments.length > 2 ? arguments[2] : undefined;
      var stave = arguments.length > 3 ? arguments[3] : undefined;
      // Initialize context maps.
      var contexts = this.tickContexts;
      var contextList = contexts.list,
          contextMap = contexts.map; // 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 (voices && stave) {
        voices.forEach(function (voice) {
          return voice.setStave(stave).preFormat();
        });
      } // Now distribute the ticks to each tick context, and assign them their
      // own X positions.


      var x = 0;
      var shift = 0;
      this.minTotalWidth = 0; // Pass 1: Give each note maximum width requested by context.

      contextList.forEach(function (tick) {
        var context = contextMap[tick];
        if (renderingContext) context.setContext(renderingContext); // Make sure that all tickables in this context have calculated their
        // space requirements.

        context.preFormat();
        var width = context.getWidth();
        _this.minTotalWidth += width;
        var metrics = context.getMetrics();
        x = x + shift + metrics.totalLeftPx;
        context.setX(x); // Calculate shift for the next tick.

        shift = width - metrics.totalLeftPx;
      });
      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.

      var firstContext = contextMap[contextList[0]];
      var 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) {
        return contextList.map(function (tick, i) {
          var context = contextMap[tick];
          var voices = context.getTickablesByVoice();
          var backTickable = null;

          if (i > 0) {
            var 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.

            var _loop = function _loop(j) {
              var backTick = contextMap[contextList[j]];
              var backVoices = backTick.getTickablesByVoice(); // Look for matching voices between tick contexts.

              var matchingVoices = [];
              Object.keys(voices).forEach(function (v) {
                if (backVoices[v]) {
                  matchingVoices.push(v);
                }
              });

              if (matchingVoices.length > 0) {
                // Found matching voices, get largest duration
                var maxTicks = 0;
                var maxNegativeShiftPx = Infinity;
                var expectedDistance = 0; // eslint-disable-next-line

                matchingVoices.forEach(function (v) {
                  var ticks = backVoices[v].getTicks().value();

                  if (ticks > maxTicks) {
                    backTickable = backVoices[v];
                    maxTicks = ticks;
                  } // Calculate the limits of the shift based on modifiers, etc.


                  var thisTickable = voices[v];
                  var insideLeftEdge = thisTickable.getX() - (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);
                  var backMetrics = backVoices[v].getMetrics();
                  var 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

                maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - prevContext.getX()); // Calculate the expected distance of the current context from the last matching tickable. The
                // distance is scaled down by the softmax for the voice.

                expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;
                return {
                  v: {
                    expectedDistance: expectedDistance,
                    maxNegativeShiftPx: maxNegativeShiftPx,
                    fromTickable: backTickable
                  }
                };
              }
            };

            for (var j = i - 1; j >= 0; j--) {
              var _ret = _loop(j);

              if (_typeof(_ret) === "object") return _ret.v;
            }
          }

          return {
            errorPx: 0,
            fromTickablePx: 0,
            maxNegativeShiftPx: 0
          };
        });
      }

      function shiftToIdealDistances(idealDistances) {
        // Distribute ticks to the contexts based on the calculated distance error.
        var centerX = adjustedJustifyWidth / 2;
        var spaceAccum = 0;
        var negativeSpaceAccum = 0;
        contextList.forEach(function (tick, index) {
          var context = contextMap[tick];

          if (index > 0) {
            var _x = context.getX();

            var ideal = idealDistances[index];

            var errorPx = ideal.fromTickable.getX() + ideal.expectedDistance - (_x + spaceAccum);

            var negativeShiftPx = 0;

            if (errorPx > 0) {
              spaceAccum += errorPx;
            } else if (errorPx < 0) {
              negativeShiftPx = Math.min(ideal.maxNegativeShiftPx + negativeSpaceAccum, Math.abs(errorPx));
            }

            context.setX(_x + spaceAccum - negativeShiftPx);
            negativeSpaceAccum += negativeShiftPx;
          } // Move center aligned tickables to middle


          context.getCenterAlignedTickables().forEach(function (tickable) {
            // eslint-disable-line
            tickable.center_x_shift = centerX - context.getX();
          });
        });
        return lastContext.getX() - firstContext.getX();
      }

      var adjustedJustifyWidth = justifyWidth - lastContext.getMetrics().notePx - lastContext.getMetrics().totalRightPx - firstContext.getMetrics().totalLeftPx;
      var targetWidth = adjustedJustifyWidth;
      var actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));
      var iterations = this.options.maxIterations;

      while (actualWidth > adjustedJustifyWidth + lastContext.getMetrics().notePx && iterations > 0) {
        // If we couldn't fit all the notes into the jusification width, it's because the softmax-scaled
        // widths between different durations differ across stave (e.g., 1 quarter note is not the same pixel-width
        // as 4 16th-notes). Run another pass, now that we know how much to justify.
        targetWidth -= actualWidth - targetWidth;
        actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));
        iterations--;
      } // Just one context. Done formatting.


      if (contextList.length === 1) return null;
      this.justifyWidth = justifyWidth;
      return this.evaluate();
    } // Calculate the total cost of this formatting decision.

  }, {
    key: "evaluate",
    value: function evaluate() {
      var _this2 = this;

      var 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: []
      };
      this.tickContexts.list.forEach(function (tick, index) {
        if (index === 0) return;
        var prevTick = _this2.tickContexts.list[index - 1];
        var prevContext = _this2.tickContexts.map[prevTick];
        var context = _this2.tickContexts.map[tick];
        var prevMetrics = prevContext.getMetrics();
        var currMetrics = context.getMetrics(); // Calculate X position of right edge of previous note

        var insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx; // Calculate X position of left edge of current note

        var insideLeftEdge = context.getX() - currMetrics.totalLeftPx;
        var gap = insideLeftEdge - insideRightEdge;
        _this2.contextGaps.total += gap;

        _this2.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.

      var durationStats = this.durationStats = {};

      function updateStats(duration, space) {
        var 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(function (voice) {
        voice.getTickables().forEach(function (note, i, notes) {
          var duration = note.getTicks().clone().simplify().toString();
          var metrics = note.getMetrics();
          var formatterMetrics = note.getFormatterMetrics();
          var leftNoteEdge = note.getX() + metrics.notePx + metrics.totalRightPx;
          var space = 0;

          if (i < notes.length - 1) {
            var rightNote = notes[i + 1];
            var rightMetrics = rightNote.getMetrics();
            var rightNoteEdge = rightNote.getX() - rightMetrics.totalLeftPx;
            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.

      var totalDeviation = 0;
      this.voices.forEach(function (voice) {
        voice.getTickables().forEach(function (note) {
          var duration = note.getTicks().clone().simplify().toString();
          var 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.
    //
    // Alpha is the "learning rate" for the formatter. It determines how much of a shift
    // the formatter should make based on its cost function.

  }, {
    key: "tune",
    value: function tune(options) {
      var _this3 = this;

      options = _objectSpread({
        alpha: 0.5
      }, options);

      var sum = function sum(arr) {
        return arr.reduce(function (a, b) {
          return a + b;
        });
      }; // Move `current` tickcontext by `shift` pixels, and adjust the freedom
      // on adjacent tickcontexts.


      function move(current, prev, next, shift) {
        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;
      }

      var shift = 0;
      this.totalShift = 0;
      this.tickContexts.list.forEach(function (tick, index, list) {
        var context = _this3.tickContexts.map[tick];
        var prevContext = index > 0 ? _this3.tickContexts.map[list[index - 1]] : null;
        var nextContext = index < list.length - 1 ? _this3.tickContexts.map[list[index + 1]] : null;
        move(context, prevContext, nextContext, shift);
        var cost = -sum(context.getTickables().map(function (t) {
          return 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 *= options.alpha;
        _this3.totalShift += shift;
      });
      this.iterationsCompleted++;
      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.

  }, {
    key: "postFormat",
    value: function postFormat() {
      var postFormatContexts = function postFormatContexts(contexts) {
        return contexts.list.forEach(function (tick) {
          return contexts.map[tick].postFormat();
        });
      };

      postFormatContexts(this.modiferContexts);
      postFormatContexts(this.tickContexts);
      return this;
    } // Take all `voices` and create `ModifierContext`s out of them. This tells
    // the formatters that the voices belong on a single stave.

  }, {
    key: "joinVoices",
    value: function 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.

  }, {
    key: "format",
    value: function format(voices, justifyWidth, options) {
      var _this4 = this;

      var opts = _objectSpread({
        align_rests: false,
        context: null,
        stave: null
      }, options);

      this.voices = voices;

      if (this.options.softmaxFactor) {
        this.voices.forEach(function (v) {
          return v.setSoftmaxFactor(_this4.options.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`.

  }, {
    key: "formatToStave",
    value: function formatToStave(voices, stave, options) {
      options = _objectSpread({
        padding: 10
      }, options);
      var justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - options.padding;
      L('Formatting voices to width: ', justifyWidth);
      return this.format(voices, justifyWidth, _objectSpread({
        context: stave.getContext()
      }, options));
    }
  }]);

  return Formatter;
}();

/***/ }),

/***/ "./src/fraction.js":
/*!*************************!*\
  !*** ./src/fraction.js ***!
  \*************************/
/*! exports provided: Fraction */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Fraction", function() { return Fraction; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// Fraction class that represents a rational number
//
// @author zz85
// @author incompleteopus (modifications)

/* eslint-disable no-underscore-dangle */

var Fraction =
/*#__PURE__*/
function () {
  _createClass(Fraction, null, [{
    key: "GCD",

    /**
     * GCD: Find greatest common divisor using Euclidean algorithm
     */
    value: function GCD(a, b) {
      if (typeof a !== 'number' || typeof b !== 'number') {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArgument', "Invalid numbers: ".concat(a, ", ").concat(b));
      }

      var t;

      while (b !== 0) {
        t = b;
        b = a % b;
        a = t;
      }

      return a;
    }
    /**
     * LCM: Lowest common multiple
     */

  }, {
    key: "LCM",
    value: function LCM(a, b) {
      return a * b / Fraction.GCD(a, b);
    }
    /**
     * LCMM: Lowest common multiple for more than two numbers
     */

  }, {
    key: "LCMM",
    value: function 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 {
        var arg0 = args[0];
        args.shift();
        return Fraction.LCM(arg0, Fraction.LCMM(args));
      }
    }
  }]);

  function Fraction(numerator, denominator) {
    _classCallCheck(this, Fraction);

    this.set(numerator, denominator);
  }

  _createClass(Fraction, [{
    key: "set",
    value: function set(numerator, denominator) {
      this.numerator = numerator === undefined ? 1 : numerator;
      this.denominator = denominator === undefined ? 1 : denominator;
      return this;
    }
  }, {
    key: "value",
    value: function value() {
      return this.numerator / this.denominator;
    }
  }, {
    key: "simplify",
    value: function simplify() {
      var u = this.numerator;
      var d = this.denominator;
      var gcd = Fraction.GCD(u, d);
      u /= gcd;
      d /= gcd;

      if (d < 0) {
        d = -d;
        u = -u;
      }

      return this.set(u, d);
    }
  }, {
    key: "add",
    value: function add(param1, param2) {
      var otherNumerator;
      var otherDenominator;

      if (param1 instanceof Fraction) {
        otherNumerator = param1.numerator;
        otherDenominator = param1.denominator;
      } else {
        if (param1 !== undefined) {
          otherNumerator = param1;
        } else {
          otherNumerator = 0;
        }

        if (param2 !== undefined) {
          otherDenominator = param2;
        } else {
          otherDenominator = 1;
        }
      }

      var lcm = Fraction.LCM(this.denominator, otherDenominator);
      var a = lcm / this.denominator;
      var b = lcm / otherDenominator;
      var u = this.numerator * a + otherNumerator * b;
      return this.set(u, lcm);
    }
  }, {
    key: "subtract",
    value: function subtract(param1, param2) {
      var otherNumerator;
      var otherDenominator;

      if (param1 instanceof Fraction) {
        otherNumerator = param1.numerator;
        otherDenominator = param1.denominator;
      } else {
        if (param1 !== undefined) {
          otherNumerator = param1;
        } else {
          otherNumerator = 0;
        }

        if (param2 !== undefined) {
          otherDenominator = param2;
        } else {
          otherDenominator = 1;
        }
      }

      var lcm = Fraction.LCM(this.denominator, otherDenominator);
      var a = lcm / this.denominator;
      var b = lcm / otherDenominator;
      var u = this.numerator * a - otherNumerator * b;
      return this.set(u, lcm);
    }
  }, {
    key: "multiply",
    value: function multiply(param1, param2) {
      var otherNumerator;
      var otherDenominator;

      if (param1 instanceof Fraction) {
        otherNumerator = param1.numerator;
        otherDenominator = param1.denominator;
      } else {
        if (param1 !== undefined) {
          otherNumerator = param1;
        } else {
          otherNumerator = 1;
        }

        if (param2 !== undefined) {
          otherDenominator = param2;
        } else {
          otherDenominator = 1;
        }
      }

      return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);
    }
  }, {
    key: "divide",
    value: function divide(param1, param2) {
      var otherNumerator;
      var otherDenominator;

      if (param1 instanceof Fraction) {
        otherNumerator = param1.numerator;
        otherDenominator = param1.denominator;
      } else {
        if (param1 !== undefined) {
          otherNumerator = param1;
        } else {
          otherNumerator = 1;
        }

        if (param2 !== undefined) {
          otherDenominator = param2;
        } else {
          otherDenominator = 1;
        }
      }

      return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);
    } // Simplifies both sides and checks if they are equal.

  }, {
    key: "equals",
    value: function equals(compare) {
      var a = Fraction.__compareA.copy(compare).simplify();

      var b = Fraction.__compareB.copy(this).simplify();

      return a.numerator === b.numerator && a.denominator === b.denominator;
    } // Greater than operator.

  }, {
    key: "greaterThan",
    value: function greaterThan(compare) {
      var a = Fraction.__compareB.copy(this);

      a.subtract(compare);
      return a.numerator > 0;
    } // Greater than or equals operator.

  }, {
    key: "greaterThanEquals",
    value: function greaterThanEquals(compare) {
      var a = Fraction.__compareB.copy(this);

      a.subtract(compare);
      return a.numerator >= 0;
    } // Less than operator.

  }, {
    key: "lessThan",
    value: function lessThan(compare) {
      return !this.greaterThanEquals(compare);
    } // Less than or equals operator.

  }, {
    key: "lessThanEquals",
    value: function lessThanEquals(compare) {
      return !this.greaterThan(compare);
    } // Creates a new copy with this current values.

  }, {
    key: "clone",
    value: function clone() {
      return new Fraction(this.numerator, this.denominator);
    } // Copies value of another Fraction into itself.

  }, {
    key: "copy",
    value: function copy(_copy) {
      if (typeof _copy === 'number') {
        return this.set(_copy || 0, 1);
      }

      return this.set(_copy.numerator, _copy.denominator);
    } // Returns the integer component eg. (4/2) == 2

  }, {
    key: "quotient",
    value: function quotient() {
      return Math.floor(this.numerator / this.denominator);
    } // Returns the fraction component when reduced to a mixed number

  }, {
    key: "fraction",
    value: function fraction() {
      return this.numerator % this.denominator;
    } // Returns the absolute value

  }, {
    key: "abs",
    value: function abs() {
      this.denominator = Math.abs(this.denominator);
      this.numerator = Math.abs(this.numerator);
      return this;
    } // Returns a raw string representation

  }, {
    key: "toString",
    value: function toString() {
      return this.numerator + '/' + this.denominator;
    } // Returns a simplified string respresentation

  }, {
    key: "toSimplifiedString",
    value: function toSimplifiedString() {
      return Fraction.__tmp.copy(this).simplify().toString();
    } // Returns string representation in mixed form

  }, {
    key: "toMixedString",
    value: function toMixedString() {
      var s = '';
      var q = this.quotient();

      var f = Fraction.__tmp.copy(this);

      if (q < 0) {
        f.abs().fraction();
      } else {
        f.fraction();
      }

      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;
    } // Parses a fraction string

  }, {
    key: "parse",
    value: function parse(str) {
      var i = str.split('/');
      var n = parseInt(i[0], 10);
      var d = i[1] ? parseInt(i[1], 10) : 1;
      return this.set(n, d);
    }
  }]);

  return Fraction;
}(); // Temporary cached objects

Fraction.__compareA = new Fraction();
Fraction.__compareB = new Fraction();
Fraction.__tmp = new Fraction();

/***/ }),

/***/ "./src/frethandfinger.js":
/*!*******************************!*\
  !*** ./src/frethandfinger.js ***!
  \*******************************/
/*! exports provided: FretHandFinger */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FretHandFinger", function() { return FretHandFinger; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// VexFlow - Music Engraving for HTML5
// Copyright Mohit Muthanna 2010
// Author Larry Kuhns 2013
// Class to draws string numbers into the notation.


/**
 * @constructor
 */

var FretHandFinger =
/*#__PURE__*/
function (_Modifier) {
  _inherits(FretHandFinger, _Modifier);

  _createClass(FretHandFinger, null, [{
    key: "format",
    // Arrange fingerings inside a ModifierContext.
    value: function format(nums, state) {
      var left_shift = state.left_shift,
          right_shift = state.right_shift;
      var num_spacing = 1;
      if (!nums || nums.length === 0) return false;
      var nums_list = [];
      var prev_note = null;
      var shiftLeft = 0;
      var shiftRight = 0;

      for (var i = 0; i < nums.length; ++i) {
        var num = nums[i];
        var note = num.getNote();
        var pos = num.getPosition();
        var props = note.getKeyProps()[num.getIndex()];

        if (note !== prev_note) {
          for (var 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: note,
          num: num,
          pos: pos,
          line: props.line,
          shiftL: shiftLeft,
          shiftR: shiftRight
        });
      } // Sort fingernumbers by line number.


      nums_list.sort(function (a, b) {
        return b.line - a.line;
      });
      var numShiftL = 0;
      var numShiftR = 0;
      var xWidthL = 0;
      var xWidthR = 0;
      var lastLine = null;
      var lastNote = null;

      for (var _i = 0; _i < nums_list.length; ++_i) {
        var num_shift = 0;
        var _nums_list$_i = nums_list[_i],
            _note = _nums_list$_i.note,
            _pos = _nums_list$_i.pos,
            _num = _nums_list$_i.num,
            line = _nums_list$_i.line,
            shiftL = _nums_list$_i.shiftL,
            shiftR = _nums_list$_i.shiftR; // Reset the position of the string number every line.

        if (line !== lastLine || _note !== lastNote) {
          numShiftL = left_shift + shiftL;
          numShiftR = right_shift + shiftR;
        }

        var 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;
    }
  }, {
    key: "CATEGORY",
    get: function get() {
      return 'frethandfinger';
    }
  }]);

  function FretHandFinger(number) {
    var _this;

    _classCallCheck(this, FretHandFinger);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(FretHandFinger).call(this));

    _this.setAttribute('type', 'FretHandFinger');

    _this.note = null;
    _this.index = null;
    _this.finger = number;
    _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.font = {
      family: 'sans-serif',
      size: 9,
      weight: 'bold'
    };
    return _this;
  }

  _createClass(FretHandFinger, [{
    key: "getCategory",
    value: function getCategory() {
      return FretHandFinger.CATEGORY;
    }
  }, {
    key: "setFretHandFinger",
    value: function setFretHandFinger(number) {
      this.finger = number;
      return this;
    }
  }, {
    key: "setOffsetX",
    value: function setOffsetX(x) {
      this.x_offset = x;
      return this;
    }
  }, {
    key: "setOffsetY",
    value: function setOffsetY(y) {
      this.y_offset = y;
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();

      if (!this.note || this.index == null) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoAttachedNote', "Can't draw string number without a note and index.");
      }

      this.setRendered();
      var ctx = this.context;
      var start = this.note.getModifierStartXY(this.position, this.index);
      var dot_x = start.x + this.x_shift + this.x_offset;
      var 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 _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('InvalidPostion', "The position ".concat(this.position, " does not exist"));
      }

      ctx.save();
      ctx.setFont(this.font.family, this.font.size, this.font.weight);
      ctx.fillText('' + this.finger, dot_x, dot_y);
      ctx.restore();
    }
  }]);

  return FretHandFinger;
}(_modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"]);

/***/ }),

/***/ "./src/ghostnote.js":
/*!**************************!*\
  !*** ./src/ghostnote.js ***!
  \**************************/
/*! exports provided: GhostNote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GhostNote", function() { return GhostNote; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }

function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description


var GhostNote =
/*#__PURE__*/
function (_StemmableNote) {
  _inherits(GhostNote, _StemmableNote);

  /** @constructor */
  function GhostNote(parameter) {
    var _this;

    _classCallCheck(this, GhostNote);

    // Sanity check
    if (!parameter) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', 'Ghost note must have valid initialization data to identify ' + 'duration.');
    }

    var note_struct; // Preserve backwards-compatibility

    if (typeof parameter === 'string') {
      note_struct = {
        duration: parameter
      };
    } else if (_typeof(parameter) === 'object') {
      note_struct = parameter;
    } else {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', 'Ghost note must have valid initialization data to identify ' + 'duration.');
    }

    _this = _possibleConstructorReturn(this, _getPrototypeOf(GhostNote).call(this, note_struct));

    _this.setAttribute('type', 'GhostNote'); // Note properties


    _this.setWidth(0);

    return _this;
  }

  _createClass(GhostNote, [{
    key: "isRest",
    value: function isRest() {
      return true;
    }
  }, {
    key: "setStave",
    value: function setStave(stave) {
      _get(_getPrototypeOf(GhostNote.prototype), "setStave", this).call(this, stave);
    }
  }, {
    key: "addToModifierContext",
    value: function addToModifierContext() {
      /* intentionally overridden */
      return this;
    }
  }, {
    key: "preFormat",
    value: function preFormat() {
      this.setPreFormatted(true);
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      if (!this.stave) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoStave', "Can't draw without a stave."); // Draw the modifiers

      this.setRendered();

      for (var i = 0; i < this.modifiers.length; ++i) {
        var modifier = this.modifiers[i];
        modifier.setContext(this.context);
        modifier.drawWithStyle();
      }
    }
  }]);

  return GhostNote;
}(_stemmablenote__WEBPACK_IMPORTED_MODULE_1__["StemmableNote"]);

/***/ }),

/***/ "./src/glyph.js":
/*!**********************!*\
  !*** ./src/glyph.js ***!
  \**********************/
/*! exports provided: Glyph */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Glyph", function() { return Glyph; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./boundingboxcomputation */ "./src/boundingboxcomputation.js");
/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.






function processOutline(outline, originX, originY, scaleX, scaleY, outlineFns) {
  var command;
  var x;
  var y;
  var i = 0;

  function nextX() {
    return originX + outline[i++] * scaleX;
  }

  function nextY() {
    return originY + outline[i++] * scaleY;
  }

  function doOutline(command) {
    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
      args[_key - 1] = arguments[_key];
    }

    outlineFns[command].apply(outlineFns, args);
  }

  while (i < outline.length) {
    command = outline[i++];

    switch (command) {
      case 'm':
      case 'l':
        doOutline(command, nextX(), nextY());
        break;

      case 'q':
        x = nextX();
        y = nextY();
        doOutline(command, nextX(), nextY(), x, y);
        break;

      case 'b':
        x = nextX();
        y = nextY();
        doOutline(command, nextX(), nextY(), nextX(), nextY(), x, y);
        break;

      case 'z':
        break;

      default:
        break;
    }
  }
}

var Glyph =
/*#__PURE__*/
function (_Element) {
  _inherits(Glyph, _Element);

  _createClass(Glyph, null, [{
    key: "lookupFontMetric",

    /*
      Static methods used to implement loading and rendering glyphs.
       Below categoryPath can be any metric path under 'glyphs', so stem.up would respolve
      to glyphs.stem.up.shifX, glyphs.stem.up.shiftY, etc.
    */
    value: function lookupFontMetric(_ref) {
      var font = _ref.font,
          category = _ref.category,
          code = _ref.code,
          key = _ref.key,
          defaultValue = _ref.defaultValue;
      var value = font.lookupMetric("glyphs.".concat(category, ".").concat(code, ".").concat(key), null);

      if (value === null) {
        value = font.lookupMetric("glyphs.".concat(category, ".").concat(key), defaultValue);
      }

      return value;
    }
  }, {
    key: "lookupGlyph",
    value: function lookupGlyph(fontStack, code) {
      if (!fontStack) {
        throw _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BAD_FONTSTACK', 'Font stack is misconfigured');
      }

      var glyph;
      var font;

      for (var i = 0; i < fontStack.length; i++) {
        font = fontStack[i];
        glyph = font.getGlyphs()[code];
        if (glyph) break;
      }

      if (!glyph) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadGlyph', "Glyph ".concat(code, " does not exist in font."));
      }

      return {
        glyph: glyph,
        font: font
      };
    }
  }, {
    key: "loadMetrics",
    value: function loadMetrics(fontStack, code) {
      var category = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;

      var _Glyph$lookupGlyph = Glyph.lookupGlyph(fontStack, code),
          glyph = _Glyph$lookupGlyph.glyph,
          font = _Glyph$lookupGlyph.font;

      var x_shift = category ? Glyph.lookupFontMetric({
        font: font,
        category: category,
        code: code,
        key: 'shiftX',
        defaultValue: 0
      }) : 0;
      var y_shift = category ? Glyph.lookupFontMetric({
        font: font,
        category: category,
        code: code,
        key: 'shiftY',
        defaultValue: 0
      }) : 0;
      var scale = category ? Glyph.lookupFontMetric({
        font: font,
        category: category,
        code: code,
        key: 'scale',
        defaultValue: 1
      }) : 1;
      var x_min = glyph.x_min;
      var x_max = glyph.x_max;
      var ha = glyph.ha;
      var outline;
      var CACHE = true;

      if (glyph.o) {
        if (CACHE) {
          if (glyph.cached_outline) {
            outline = glyph.cached_outline;
          } else {
            outline = glyph.o.split(' ');
            glyph.cached_outline = outline;
          }
        } else {
          if (glyph.cached_outline) delete glyph.cached_outline;
          outline = glyph.o.split(' ');
        }

        return {
          x_min: x_min,
          x_max: x_max,
          x_shift: x_shift,
          y_shift: y_shift,
          scale: scale,
          ha: ha,
          outline: outline,
          font: font
        };
      } else {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadGlyph', "Glyph ".concat(code, " has no outline defined."));
      }
    }
    /**
     * A quick and dirty static glyph renderer. Renders glyphs from the default
     * font defined in Vex.Flow.Font.
     *
     * @param {!Object} ctx The canvas context.
     * @param {number} x_pos X coordinate.
     * @param {number} y_pos Y coordinate.
     * @param {number} point The point size to use.
     * @param {string} val The glyph code in font.getGlyphs()
     */

  }, {
    key: "renderGlyph",
    value: function renderGlyph(ctx, x_pos, y_pos, point, val, options) {
      var params = _objectSpread({
        fontStack: _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].DEFAULT_FONT_STACK,
        category: null
      }, options);

      var metrics = Glyph.loadMetrics(params.fontStack, val, params.category);
      point = params.category ? Glyph.lookupFontMetric({
        font: metrics.font,
        category: params.category,
        code: val,
        key: 'point',
        defaultValue: point
      }) : point;
      var scale = point * 72.0 / (metrics.font.getResolution() * 100.0);
      Glyph.renderOutline(ctx, metrics.outline, scale * metrics.scale, x_pos + metrics.x_shift, y_pos + metrics.y_shift, options);
      return metrics;
    }
  }, {
    key: "renderOutline",
    value: function renderOutline(ctx, outline, scale, x_pos, y_pos, options) {
      ctx.beginPath();
      ctx.moveTo(x_pos, y_pos);
      processOutline(outline, x_pos, y_pos, scale, -scale, {
        m: ctx.moveTo.bind(ctx),
        l: ctx.lineTo.bind(ctx),
        q: ctx.quadraticCurveTo.bind(ctx),
        b: ctx.bezierCurveTo.bind(ctx) // z: ctx.fill.bind(ctx), // ignored

      }, options);
      ctx.fill();
    }
  }, {
    key: "getOutlineBoundingBox",
    value: function getOutlineBoundingBox(outline, scale, x_pos, y_pos) {
      var bboxComp = new _boundingboxcomputation__WEBPACK_IMPORTED_MODULE_3__["BoundingBoxComputation"]();
      processOutline(outline, x_pos, y_pos, scale, -scale, {
        m: bboxComp.addPoint.bind(bboxComp),
        l: bboxComp.addPoint.bind(bboxComp),
        q: bboxComp.addQuadraticCurve.bind(bboxComp),
        b: bboxComp.addBezierCurve.bind(bboxComp),
        z: bboxComp.noOp.bind(bboxComp)
      });
      return new _boundingbox__WEBPACK_IMPORTED_MODULE_4__["BoundingBox"](bboxComp.x1, bboxComp.y1, bboxComp.width(), bboxComp.height());
    }
    /**
     * @constructor
     */

  }]);

  function Glyph(code, point, options) {
    var _this;

    _classCallCheck(this, Glyph);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Glyph).call(this));

    _this.setAttribute('type', 'Glyph');

    _this.code = code;
    _this.point = point;
    _this.options = {
      fontStack: _this.getFontStack(),
      category: null
    };
    _this.metrics = null;
    _this.x_shift = 0;
    _this.y_shift = 0;
    _this.originShift = {
      x: 0,
      y: 0
    };

    if (options) {
      _this.setOptions(options);
    } else {
      _this.reset();
    }

    return _this;
  }

  _createClass(Glyph, [{
    key: "getCode",
    value: function getCode() {
      return this.code;
    }
  }, {
    key: "setOptions",
    value: function setOptions(options) {
      this.options = _objectSpread({}, this.options, {}, options);
      this.reset();
    }
  }, {
    key: "setPoint",
    value: function setPoint(point) {
      this.point = point;
      return this;
    }
  }, {
    key: "setStave",
    value: function setStave(stave) {
      this.stave = stave;
      return this;
    }
  }, {
    key: "setXShift",
    value: function setXShift(x_shift) {
      this.x_shift = x_shift;
      return this;
    }
  }, {
    key: "setYShift",
    value: function setYShift(y_shift) {
      this.y_shift = y_shift;
      return this;
    }
  }, {
    key: "reset",
    value: function reset() {
      this.metrics = Glyph.loadMetrics(this.options.fontStack, this.code, this.options.category); // Override point from metrics file

      this.point = this.options.category ? Glyph.lookupFontMetric({
        category: this.options.category,
        font: this.metrics.font,
        code: this.code,
        key: 'point',
        defaultValue: this.point
      }) : this.point;
      this.scale = this.point * 72 / (this.metrics.font.getResolution() * 100);
      this.bbox = Glyph.getOutlineBoundingBox(this.metrics.outline, this.scale * this.metrics.scale, this.metrics.x_shift, this.metrics.y_shift);
    }
  }, {
    key: "getMetrics",
    value: function getMetrics() {
      if (!this.metrics) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadGlyph', "Glyph ".concat(this.code, " is not initialized."));
      }

      return {
        x_min: this.metrics.x_min * this.scale * this.metrics.scale,
        x_max: this.metrics.x_max * this.scale * this.metrics.scale,
        width: this.bbox.getW(),
        height: this.bbox.getH()
      };
    }
  }, {
    key: "setOriginX",
    value: function setOriginX(x) {
      var bbox = this.bbox;
      var originX = Math.abs(bbox.getX() / bbox.getW());
      var xShift = (x - originX) * bbox.getW();
      this.originShift.x = -xShift;
    }
  }, {
    key: "setOriginY",
    value: function setOriginY(y) {
      var bbox = this.bbox;
      var originY = Math.abs(bbox.getY() / bbox.getH());
      var yShift = (y - originY) * bbox.getH();
      this.originShift.y = -yShift;
    }
  }, {
    key: "setOrigin",
    value: function setOrigin(x, y) {
      this.setOriginX(x);
      this.setOriginY(y);
    }
  }, {
    key: "render",
    value: function render(ctx, x, y) {
      if (!this.metrics) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadGlyph', "Glyph ".concat(this.code, " is not initialized."));
      }

      var outline = this.metrics.outline;
      var scale = this.scale * this.metrics.scale;
      this.setRendered();
      this.applyStyle(ctx);
      Glyph.renderOutline(ctx, outline, scale, x + this.originShift.x + this.metrics.x_shift, y + this.originShift.y + this.metrics.y_shift);
      this.restoreStyle(ctx);
    }
  }, {
    key: "renderToStave",
    value: function renderToStave(x) {
      this.checkContext();

      if (!this.metrics) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadGlyph', "Glyph ".concat(this.code, " is not initialized."));
      }

      if (!this.stave) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('GlyphError', 'No valid stave');
      }

      var outline = this.metrics.outline;
      var scale = this.scale * this.metrics.scale;
      this.setRendered();
      this.applyStyle();
      Glyph.renderOutline(this.context, outline, scale, x + this.x_shift + this.metrics.x_shift, this.stave.getYForGlyphs() + this.y_shift + this.metrics.y_shift);
      this.restoreStyle();
    }
  }]);

  return Glyph;
}(_element__WEBPACK_IMPORTED_MODULE_2__["Element"]);

/***/ }),

/***/ "./src/glyphnote.js":
/*!**************************!*\
  !*** ./src/glyphnote.js ***!
  \**************************/
/*! exports provided: GlyphNote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GlyphNote", function() { return GlyphNote; });
/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.

var GlyphNote =
/*#__PURE__*/
function (_Note) {
  _inherits(GlyphNote, _Note);

  function GlyphNote(glyph, noteStruct, options) {
    var _this;

    _classCallCheck(this, GlyphNote);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(GlyphNote).call(this, noteStruct));
    _this.options = _objectSpread({
      ignoreTicks: false,
      line: 2
    }, options);

    _this.setAttribute('type', 'GlyphNote'); // Note properties


    _this.ignore_ticks = _this.options.ignoreTicks;

    if (glyph) {
      _this.setGlyph(glyph);
    }

    return _this;
  }

  _createClass(GlyphNote, [{
    key: "setGlyph",
    value: function setGlyph(glyph) {
      this.glyph = glyph;
      this.setWidth(this.glyph.getMetrics().width);
      return this;
    }
  }, {
    key: "getBoundingBox",
    value: function getBoundingBox() {
      return this.glyph.getBoundingBox();
    }
    /*
    addToModifierContext() {
      return this;
    }
    */

  }, {
    key: "preFormat",
    value: function preFormat() {
      this.setPreFormatted(true);
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      this.stave.checkContext();
      this.setRendered(); // Context is set when setStave is called on Note

      if (!this.glyph.getContext()) {
        this.glyph.setContext(this.context);
      }

      this.glyph.setStave(this.stave);
      this.glyph.setYShift(this.stave.getYForLine(this.options.line) - this.stave.getYForGlyphs());
      var x = this.isCenterAligned() ? this.getAbsoluteX() - this.getWidth() / 2 : this.getAbsoluteX();
      this.glyph.renderToStave(x);
    }
  }]);

  return GlyphNote;
}(_note__WEBPACK_IMPORTED_MODULE_0__["Note"]);

/***/ }),

/***/ "./src/gracenote.js":
/*!**************************!*\
  !*** ./src/gracenote.js ***!
  \**************************/
/*! exports provided: GraceNote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GraceNote", function() { return GraceNote; });
/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.js");
/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stem */ "./src/stem.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }

function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.



var GraceNote =
/*#__PURE__*/
function (_StaveNote) {
  _inherits(GraceNote, _StaveNote);

  _createClass(GraceNote, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'gracenotes';
    }
  }, {
    key: "LEDGER_LINE_OFFSET",
    get: function get() {
      return 2;
    }
  }, {
    key: "SCALE",
    get: function get() {
      return 0.66;
    }
  }]);

  function GraceNote(note_struct) {
    var _this;

    _classCallCheck(this, GraceNote);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(GraceNote).call(this, _extends(note_struct, {
      glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].DEFAULT_NOTATION_FONT_SCALE * GraceNote.SCALE,
      stroke_px: GraceNote.LEDGER_LINE_OFFSET
    })));

    _this.setAttribute('type', 'GraceNote');

    _this.slash = note_struct.slash;
    _this.slur = true;

    _this.buildNoteHeads();

    _this.width = 3;
    return _this;
  }

  _createClass(GraceNote, [{
    key: "getStemExtension",
    value: function getStemExtension() {
      if (this.stem_extension_override != null) {
        return this.stem_extension_override;
      }

      var glyph = this.getGlyph();

      if (glyph) {
        var ret = _get(_getPrototypeOf(GraceNote.prototype), "getStemExtension", this).call(this);

        if (glyph.stem) {
          var staveNoteScale = this.getStaveNoteScale();
          ret = (_stem__WEBPACK_IMPORTED_MODULE_1__["Stem"].HEIGHT + ret) * staveNoteScale - _stem__WEBPACK_IMPORTED_MODULE_1__["Stem"].HEIGHT;
        }

        return ret;
      }

      return 0;
    }
  }, {
    key: "getCategory",
    value: function getCategory() {
      return GraceNote.CATEGORY;
    } // FIXME: move this to more basic class.

  }, {
    key: "getStaveNoteScale",
    value: function getStaveNoteScale() {
      return this.render_options.glyph_font_scale / _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].DEFAULT_NOTATION_FONT_SCALE;
    }
  }, {
    key: "draw",
    value: function draw() {
      _get(_getPrototypeOf(GraceNote.prototype), "draw", this).call(this);

      this.setRendered();
      var stem = this.stem;

      if (this.slash && stem) {
        var staveNoteScale = this.getStaveNoteScale(); // some magic numbers are based on the staveNoteScale 0.66.

        var offsetScale = staveNoteScale / 0.66;
        var slashBBox = undefined;
        var 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 {
          var stem_direction = this.getStemDirection();
          var noteHeadBounds = this.getNoteHeadBounds();
          var noteStemHeight = stem.getHeight();
          var x = this.getAbsoluteX();
          var y = stem_direction === _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].Stem.DOWN ? noteHeadBounds.y_top - noteStemHeight : noteHeadBounds.y_bottom - noteStemHeight;
          var defaultStemExtention = stem_direction === _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].Stem.DOWN ? this.glyph.stem_down_extension : this.glyph.stem_up_extension;
          var defaultOffsetY = _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].STEM_HEIGHT;
          defaultOffsetY -= defaultOffsetY / 2.8;
          defaultOffsetY += defaultStemExtention;
          y += defaultOffsetY * staveNoteScale * stem_direction;
          var offsets = stem_direction === _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].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: avoide staff lines, leadger lines or others.


        var ctx = this.context;
        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();
      }
    }
  }, {
    key: "calcBeamedNotesSlashBBox",
    value: function calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {
      var beam = this.beam;
      var beam_slope = beam.slope;
      var isBeamEndNote = beam.notes[beam.notes.length - 1] === this;
      var scaleX = isBeamEndNote ? -1 : 1;
      var beam_angle = Math.atan(beam_slope * scaleX); // slash line intersecting point on beam.

      var iPointOnBeam = {
        dx: Math.cos(beam_angle) * slashBeamOffset,
        dy: Math.sin(beam_angle) * slashBeamOffset
      };
      slashStemOffset *= this.getStemDirection();
      var slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);
      var protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;
      var protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;
      var protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;
      var protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;
      var stemX = this.getStemX();
      var stem0X = beam.notes[0].getStemX();
      var stemY = this.beam.getBeamYToDraw() + (stemX - stem0X) * beam_slope;
      var 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;
    }
  }]);

  return GraceNote;
}(_stavenote__WEBPACK_IMPORTED_MODULE_0__["StaveNote"]);

/***/ }),

/***/ "./src/gracenotegroup.js":
/*!*******************************!*\
  !*** ./src/gracenotegroup.js ***!
  \*******************************/
/*! exports provided: GraceNoteGroup */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GraceNoteGroup", function() { return GraceNoteGroup; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./formatter */ "./src/formatter.js");
/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./voice */ "./src/voice.js");
/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./beam */ "./src/beam.js");
/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.js");
/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.js");
/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://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 `Vex.Flow.GraceNoteGroup.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (GraceNoteGroup.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.GraceNoteGroup', args);
}

var GraceNoteGroup =
/*#__PURE__*/
function (_Modifier) {
  _inherits(GraceNoteGroup, _Modifier);

  _createClass(GraceNoteGroup, null, [{
    key: "format",
    // Arrange groups inside a `ModifierContext`
    value: function format(gracenote_groups, state) {
      var group_spacing_stave = 4;
      var group_spacing_tab = 0;
      if (!gracenote_groups || gracenote_groups.length === 0) return false;
      var group_list = [];
      var prev_note = null;
      var shiftL = 0;

      for (var i = 0; i < gracenote_groups.length; ++i) {
        var gracenote_group = gracenote_groups[i];
        var note = gracenote_group.getNote();
        var is_stavenote = note.getCategory() === _stavenote__WEBPACK_IMPORTED_MODULE_8__["StaveNote"].CATEGORY;
        var 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 (var n = 0; n < note.keys.length; ++n) {
            shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);
          }

          prev_note = note;
        }

        group_list.push({
          shift: shiftL,
          gracenote_group: gracenote_group,
          spacing: spacing
        });
      } // If first note left shift in case it is displaced


      var group_shift = group_list[0].shift;
      var formatWidth;

      for (var _i = 0; _i < group_list.length; ++_i) {
        var _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 (var _i2 = 0; _i2 < group_list.length; ++_i2) {
        var _gracenote_group2 = group_list[_i2].gracenote_group;
        formatWidth = _gracenote_group2.getWidth() + group_list[_i2].spacing;

        _gracenote_group2.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift));
      }

      state.left_shift += group_shift;
      return true;
    } // ## Prototype Methods
    //
    // `GraceNoteGroup` inherits from `Modifier` and is placed inside a
    // `ModifierContext`.

  }, {
    key: "CATEGORY",
    get: function get() {
      return 'gracenotegroups';
    }
  }]);

  function GraceNoteGroup(grace_notes, show_slur) {
    var _this;

    _classCallCheck(this, GraceNoteGroup);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(GraceNoteGroup).call(this));

    _this.setAttribute('type', 'GraceNoteGroup');

    _this.note = null;
    _this.index = null;
    _this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"].Position.LEFT;
    _this.grace_notes = grace_notes;
    _this.width = 0;
    _this.preFormatted = false;
    _this.show_slur = show_slur;
    _this.slur = null;
    _this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_3__["Formatter"]();
    _this.voice = new _voice__WEBPACK_IMPORTED_MODULE_4__["Voice"]({
      num_beats: 4,
      beat_value: 4,
      resolution: _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].RESOLUTION
    }).setStrict(false);
    _this.render_options = {
      slur_y_shift: 0
    };
    _this.beams = [];

    _this.voice.addTickables(_this.grace_notes);

    return _possibleConstructorReturn(_this, _assertThisInitialized(_this));
  }

  _createClass(GraceNoteGroup, [{
    key: "getCategory",
    value: function getCategory() {
      return GraceNoteGroup.CATEGORY;
    }
  }, {
    key: "preFormat",
    value: function preFormat() {
      if (this.preFormatted) return;
      this.formatter.joinVoices([this.voice]).format([this.voice], 0);
      this.setWidth(this.formatter.getMinTotalWidth());
      this.preFormatted = true;
    }
  }, {
    key: "beamNotes",
    value: function beamNotes(grace_notes) {
      grace_notes = grace_notes || this.grace_notes;

      if (grace_notes.length > 1) {
        var beam = new _beam__WEBPACK_IMPORTED_MODULE_5__["Beam"](grace_notes);
        beam.render_options.beam_width = 3;
        beam.render_options.partial_beam_length = 4;
        this.beams.push(beam);
      }

      return this;
    }
  }, {
    key: "setNote",
    value: function setNote(note) {
      this.note = note;
    }
  }, {
    key: "setWidth",
    value: function setWidth(width) {
      this.width = width;
    }
  }, {
    key: "getWidth",
    value: function getWidth() {
      return this.width;
    }
  }, {
    key: "getGraceNotes",
    value: function getGraceNotes() {
      return this.grace_notes;
    }
  }, {
    key: "draw",
    value: function draw() {
      var _this2 = this;

      this.checkContext();
      var note = this.getNote();
      L('Drawing grace note group for:', note);

      if (!(note && this.index !== null)) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('NoAttachedNote', "Can't draw grace note without a parent note and parent note index.");
      }

      this.setRendered();
      this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function
      // Draw notes

      this.grace_notes.forEach(function (graceNote) {
        graceNote.setContext(_this2.context).draw();
      }); // Draw beam

      this.beams.forEach(function (beam) {
        beam.setContext(_this2.context).draw();
      });

      if (this.show_slur) {
        // Create and draw slur
        var is_stavenote = this.getNote().getCategory() === _stavenote__WEBPACK_IMPORTED_MODULE_8__["StaveNote"].CATEGORY;
        var TieClass = is_stavenote ? _stavetie__WEBPACK_IMPORTED_MODULE_6__["StaveTie"] : _tabtie__WEBPACK_IMPORTED_MODULE_7__["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(this.context).draw();
      }
    }
  }]);

  return GraceNoteGroup;
}(_modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"]);

/***/ }),

/***/ "./src/gracetabnote.js":
/*!*****************************!*\
  !*** ./src/gracetabnote.js ***!
  \*****************************/
/*! exports provided: GraceTabNote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GraceTabNote", function() { return GraceTabNote; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }

function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://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.js` for usage examples.


var GraceTabNote =
/*#__PURE__*/
function (_TabNote) {
  _inherits(GraceTabNote, _TabNote);

  _createClass(GraceTabNote, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'gracetabnotes';
    }
  }]);

  function GraceTabNote(note_struct) {
    var _this;

    _classCallCheck(this, GraceTabNote);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(GraceTabNote).call(this, note_struct, false));

    _this.setAttribute('type', 'GraceTabNote');

    _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(_this.render_options, {
      // vertical shift from stave line
      y_shift: 0.3,
      // grace glyph scale
      scale: 0.6,
      // grace tablature font
      font: '7.5pt Arial'
    });

    _this.updateWidth();

    return _this;
  }

  _createClass(GraceTabNote, [{
    key: "getCategory",
    value: function getCategory() {
      return GraceTabNote.CATEGORY;
    }
  }, {
    key: "draw",
    value: function draw() {
      _get(_getPrototypeOf(GraceTabNote.prototype), "draw", this).call(this);

      this.setRendered();
    }
  }]);

  return GraceTabNote;
}(_tabnote__WEBPACK_IMPORTED_MODULE_1__["TabNote"]);

/***/ }),

/***/ "./src/index.js":
/*!**********************!*\
  !*** ./src/index.js ***!
  \**********************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fraction */ "./src/fraction.js");
/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./renderer */ "./src/renderer.js");
/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./formatter */ "./src/formatter.js");
/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./music */ "./src/music.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stave */ "./src/stave.js");
/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.js");
/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.js");
/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.js");
/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./voice */ "./src/voice.js");
/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./accidental */ "./src/accidental.js");
/* harmony import */ var _beam__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./beam */ "./src/beam.js");
/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.js");
/* harmony import */ var _tabstave__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./tabstave */ "./src/tabstave.js");
/* harmony import */ var _tabnote__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./tabnote */ "./src/tabnote.js");
/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./bend */ "./src/bend.js");
/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.js");
/* harmony import */ var _vibratobracket__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./vibratobracket */ "./src/vibratobracket.js");
/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./note */ "./src/note.js");
/* harmony import */ var _modifiercontext__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./modifiercontext */ "./src/modifiercontext.js");
/* harmony import */ var _multimeasurerest__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./multimeasurerest */ "./src/multimeasurerest.js");
/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.js");
/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./articulation */ "./src/articulation.js");
/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./annotation */ "./src/annotation.js");
/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.js");
/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./notehead */ "./src/notehead.js");
/* harmony import */ var _staveconnector__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./staveconnector */ "./src/staveconnector.js");
/* harmony import */ var _clefnote__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./clefnote */ "./src/clefnote.js");
/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.js");
/* harmony import */ var _keysignote__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./keysignote */ "./src/keysignote.js");
/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.js");
/* harmony import */ var _timesignote__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./timesignote */ "./src/timesignote.js");
/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./stem */ "./src/stem.js");
/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.js");
/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./clef */ "./src/clef.js");
/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./dot */ "./src/dot.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
/* harmony import */ var _tabslide__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./tabslide */ "./src/tabslide.js");
/* harmony import */ var _tuplet__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./tuplet */ "./src/tuplet.js");
/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.js");
/* harmony import */ var _gracetabnote__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! ./gracetabnote */ "./src/gracetabnote.js");
/* harmony import */ var _tuning__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! ./tuning */ "./src/tuning.js");
/* harmony import */ var _keymanager__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! ./keymanager */ "./src/keymanager.js");
/* harmony import */ var _stavehairpin__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! ./stavehairpin */ "./src/stavehairpin.js");
/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.js");
/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! ./strokes */ "./src/strokes.js");
/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! ./textnote */ "./src/textnote.js");
/* harmony import */ var _curve__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! ./curve */ "./src/curve.js");
/* harmony import */ var _textdynamics__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! ./textdynamics */ "./src/textdynamics.js");
/* harmony import */ var _staveline__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! ./staveline */ "./src/staveline.js");
/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! ./ornament */ "./src/ornament.js");
/* harmony import */ var _pedalmarking__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! ./pedalmarking */ "./src/pedalmarking.js");
/* harmony import */ var _textbracket__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! ./textbracket */ "./src/textbracket.js");
/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.js");
/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.js");
/* harmony import */ var _barnote__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! ./barnote */ "./src/barnote.js");
/* harmony import */ var _ghostnote__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! ./ghostnote */ "./src/ghostnote.js");
/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.js");
/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.js");
/* harmony import */ var _tremolo__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! ./tremolo */ "./src/tremolo.js");
/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.js");
/* harmony import */ var _crescendo__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! ./crescendo */ "./src/crescendo.js");
/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.js");
/* harmony import */ var _system__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! ./system */ "./src/system.js");
/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! ./factory */ "./src/factory.js");
/* harmony import */ var _parser__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(/*! ./parser */ "./src/parser.js");
/* harmony import */ var _easyscore__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(/*! ./easyscore */ "./src/easyscore.js");
/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(/*! ./registry */ "./src/registry.js");
/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.js");
/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.js");
/* harmony import */ var _repeatnote__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(/*! ./repeatnote */ "./src/repeatnote.js");
/* harmony import */ var _smufl__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(/*! ./smufl */ "./src/smufl.js");
// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.











































































_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Element = _element__WEBPACK_IMPORTED_MODULE_2__["Element"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Fraction = _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Renderer = _renderer__WEBPACK_IMPORTED_MODULE_4__["Renderer"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Formatter = _formatter__WEBPACK_IMPORTED_MODULE_5__["Formatter"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Music = _music__WEBPACK_IMPORTED_MODULE_6__["Music"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Glyph = _glyph__WEBPACK_IMPORTED_MODULE_7__["Glyph"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Stave = _stave__WEBPACK_IMPORTED_MODULE_8__["Stave"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.StaveNote = _stavenote__WEBPACK_IMPORTED_MODULE_9__["StaveNote"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.StaveModifier = _stavemodifier__WEBPACK_IMPORTED_MODULE_10__["StaveModifier"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.StaveTempo = _stavetempo__WEBPACK_IMPORTED_MODULE_11__["StaveTempo"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Voice = _voice__WEBPACK_IMPORTED_MODULE_12__["Voice"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Accidental = _accidental__WEBPACK_IMPORTED_MODULE_13__["Accidental"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Beam = _beam__WEBPACK_IMPORTED_MODULE_14__["Beam"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.StaveTie = _stavetie__WEBPACK_IMPORTED_MODULE_15__["StaveTie"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.TabStave = _tabstave__WEBPACK_IMPORTED_MODULE_16__["TabStave"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.TabNote = _tabnote__WEBPACK_IMPORTED_MODULE_17__["TabNote"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Bend = _bend__WEBPACK_IMPORTED_MODULE_18__["Bend"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Vibrato = _vibrato__WEBPACK_IMPORTED_MODULE_19__["Vibrato"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.VibratoBracket = _vibratobracket__WEBPACK_IMPORTED_MODULE_20__["VibratoBracket"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Note = _note__WEBPACK_IMPORTED_MODULE_21__["Note"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.ModifierContext = _modifiercontext__WEBPACK_IMPORTED_MODULE_22__["ModifierContext"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.MultiMeasureRest = _multimeasurerest__WEBPACK_IMPORTED_MODULE_23__["MultiMeasureRest"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.TickContext = _tickcontext__WEBPACK_IMPORTED_MODULE_24__["TickContext"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Articulation = _articulation__WEBPACK_IMPORTED_MODULE_25__["Articulation"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Annotation = _annotation__WEBPACK_IMPORTED_MODULE_26__["Annotation"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Barline = _stavebarline__WEBPACK_IMPORTED_MODULE_27__["Barline"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.NoteHead = _notehead__WEBPACK_IMPORTED_MODULE_28__["NoteHead"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.StaveConnector = _staveconnector__WEBPACK_IMPORTED_MODULE_29__["StaveConnector"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.ClefNote = _clefnote__WEBPACK_IMPORTED_MODULE_30__["ClefNote"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.KeySignature = _keysignature__WEBPACK_IMPORTED_MODULE_31__["KeySignature"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.KeySigNote = _keysignote__WEBPACK_IMPORTED_MODULE_32__["KeySigNote"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.TimeSignature = _timesignature__WEBPACK_IMPORTED_MODULE_33__["TimeSignature"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.TimeSigNote = _timesignote__WEBPACK_IMPORTED_MODULE_34__["TimeSigNote"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Stem = _stem__WEBPACK_IMPORTED_MODULE_35__["Stem"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.TabTie = _tabtie__WEBPACK_IMPORTED_MODULE_36__["TabTie"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Clef = _clef__WEBPACK_IMPORTED_MODULE_37__["Clef"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Dot = _dot__WEBPACK_IMPORTED_MODULE_38__["Dot"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Modifier = _modifier__WEBPACK_IMPORTED_MODULE_39__["Modifier"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.TabSlide = _tabslide__WEBPACK_IMPORTED_MODULE_40__["TabSlide"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Tuplet = _tuplet__WEBPACK_IMPORTED_MODULE_41__["Tuplet"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.GraceNote = _gracenote__WEBPACK_IMPORTED_MODULE_42__["GraceNote"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.GraceTabNote = _gracetabnote__WEBPACK_IMPORTED_MODULE_43__["GraceTabNote"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Tuning = _tuning__WEBPACK_IMPORTED_MODULE_44__["Tuning"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.KeyManager = _keymanager__WEBPACK_IMPORTED_MODULE_45__["KeyManager"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.StaveHairpin = _stavehairpin__WEBPACK_IMPORTED_MODULE_46__["StaveHairpin"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.BoundingBox = _boundingbox__WEBPACK_IMPORTED_MODULE_47__["BoundingBox"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Stroke = _strokes__WEBPACK_IMPORTED_MODULE_48__["Stroke"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.TextNote = _textnote__WEBPACK_IMPORTED_MODULE_49__["TextNote"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Curve = _curve__WEBPACK_IMPORTED_MODULE_50__["Curve"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.TextDynamics = _textdynamics__WEBPACK_IMPORTED_MODULE_51__["TextDynamics"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.StaveLine = _staveline__WEBPACK_IMPORTED_MODULE_52__["StaveLine"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Ornament = _ornament__WEBPACK_IMPORTED_MODULE_53__["Ornament"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.PedalMarking = _pedalmarking__WEBPACK_IMPORTED_MODULE_54__["PedalMarking"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.TextBracket = _textbracket__WEBPACK_IMPORTED_MODULE_55__["TextBracket"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.FretHandFinger = _frethandfinger__WEBPACK_IMPORTED_MODULE_56__["FretHandFinger"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Repetition = _staverepetition__WEBPACK_IMPORTED_MODULE_57__["Repetition"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.BarNote = _barnote__WEBPACK_IMPORTED_MODULE_58__["BarNote"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.GhostNote = _ghostnote__WEBPACK_IMPORTED_MODULE_59__["GhostNote"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.NoteSubGroup = _notesubgroup__WEBPACK_IMPORTED_MODULE_60__["NoteSubGroup"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.GraceNoteGroup = _gracenotegroup__WEBPACK_IMPORTED_MODULE_61__["GraceNoteGroup"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Tremolo = _tremolo__WEBPACK_IMPORTED_MODULE_62__["Tremolo"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.StringNumber = _stringnumber__WEBPACK_IMPORTED_MODULE_63__["StringNumber"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Crescendo = _crescendo__WEBPACK_IMPORTED_MODULE_64__["Crescendo"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Volta = _stavevolta__WEBPACK_IMPORTED_MODULE_65__["Volta"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.System = _system__WEBPACK_IMPORTED_MODULE_66__["System"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Factory = _factory__WEBPACK_IMPORTED_MODULE_67__["Factory"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Parser = _parser__WEBPACK_IMPORTED_MODULE_68__["Parser"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.EasyScore = _easyscore__WEBPACK_IMPORTED_MODULE_69__["EasyScore"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Registry = _registry__WEBPACK_IMPORTED_MODULE_70__["Registry"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.StaveText = _stavetext__WEBPACK_IMPORTED_MODULE_71__["StaveText"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.GlyphNote = _glyphnote__WEBPACK_IMPORTED_MODULE_72__["GlyphNote"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.RepeatNote = _repeatnote__WEBPACK_IMPORTED_MODULE_73__["RepeatNote"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Font = _smufl__WEBPACK_IMPORTED_MODULE_74__["Font"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.Fonts = _smufl__WEBPACK_IMPORTED_MODULE_74__["Fonts"];
_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Flow.DefaultFontStack = _smufl__WEBPACK_IMPORTED_MODULE_74__["DefaultFontStack"];
/* harmony default export */ __webpack_exports__["default"] = (_vex__WEBPACK_IMPORTED_MODULE_0__["Vex"]);

/***/ }),

/***/ "./src/keymanager.js":
/*!***************************!*\
  !*** ./src/keymanager.js ***!
  \***************************/
/*! exports provided: KeyManager */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeyManager", function() { return KeyManager; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _music__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./music */ "./src/music.js");
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
//
// This class implements diatonic key management.


var KeyManager =
/*#__PURE__*/
function () {
  function KeyManager(key) {
    _classCallCheck(this, KeyManager);

    this.music = new _music__WEBPACK_IMPORTED_MODULE_1__["Music"]();
    this.setKey(key);
  }

  _createClass(KeyManager, [{
    key: "setKey",
    value: function setKey(key) {
      this.key = key;
      this.reset();
      return this;
    }
  }, {
    key: "getKey",
    value: function getKey() {
      return this.key;
    }
  }, {
    key: "reset",
    value: function reset() {
      this.keyParts = this.music.getKeyParts(this.key);
      this.keyString = this.keyParts.root;
      if (this.keyParts.accidental) this.keyString += this.keyParts.accidental;
      var is_supported_type = _music__WEBPACK_IMPORTED_MODULE_1__["Music"].scaleTypes[this.keyParts.type];

      if (!is_supported_type) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "Unsupported key type: ".concat(this.key));
      }

      this.scale = this.music.getScaleTones(this.music.getNoteValue(this.keyString), _music__WEBPACK_IMPORTED_MODULE_1__["Music"].scaleTypes[this.keyParts.type]);
      this.scaleMap = {};
      this.scaleMapByValue = {};
      this.originalScaleMapByValue = {};
      var noteLocation = _music__WEBPACK_IMPORTED_MODULE_1__["Music"].root_indices[this.keyParts.root];

      for (var i = 0; i < _music__WEBPACK_IMPORTED_MODULE_1__["Music"].roots.length; ++i) {
        var index = (noteLocation + i) % _music__WEBPACK_IMPORTED_MODULE_1__["Music"].roots.length;
        var rootName = _music__WEBPACK_IMPORTED_MODULE_1__["Music"].roots[index];
        var 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;
    }
  }, {
    key: "getAccidental",
    value: function getAccidental(key) {
      var root = this.music.getKeyParts(key).root;
      var parts = this.music.getNoteParts(this.scaleMap[root]);
      return {
        note: this.scaleMap[root],
        accidental: parts.accidental
      };
    }
  }, {
    key: "selectNote",
    value: function selectNote(note) {
      note = note.toLowerCase();
      var parts = this.music.getNoteParts(note); // First look for matching note in our altered scale

      var scaleNote = this.scaleMap[parts.root];
      var 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


      var 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


      var 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': null,
          '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: note,
        'accidental': parts.accidental,
        'change': true
      };
    }
  }]);

  return KeyManager;
}();

/***/ }),

/***/ "./src/keysignature.js":
/*!*****************************!*\
  !*** ./src/keysignature.js ***!
  \*****************************/
/*! exports provided: KeySignature */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeySignature", function() { return KeySignature; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://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.




var KeySignature =
/*#__PURE__*/
function (_StaveModifier) {
  _inherits(KeySignature, _StaveModifier);

  _createClass(KeySignature, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'keysignatures';
    } // Space between natural and following accidental depending
    // on vertical position

  }, {
    key: "accidentalSpacing",
    get: function get() {
      return {
        '#': {
          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
        }
      };
    } // Create a new Key Signature based on a `key_spec`

  }]);

  function KeySignature(keySpec, cancelKeySpec, alterKeySpec) {
    var _this;

    _classCallCheck(this, KeySignature);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(KeySignature).call(this));

    _this.setAttribute('type', 'KeySignature');

    _this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);

    _this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_2__["StaveModifier"].Position.BEGIN);

    _this.glyphFontScale = 38; // TODO(0xFE): Should this match StaveNote?

    _this.glyphs = [];
    _this.xPositions = []; // relative to this.x

    _this.paddingForced = false;
    return _this;
  }

  _createClass(KeySignature, [{
    key: "getCategory",
    value: function getCategory() {
      return KeySignature.CATEGORY;
    } // 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

  }, {
    key: "convertToGlyph",
    value: function convertToGlyph(acc, nextAcc) {
      var accGlyphData = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].accidentalCodes(acc.type);
      var glyph = new _glyph__WEBPACK_IMPORTED_MODULE_3__["Glyph"](accGlyphData.code, this.glyphFontScale); // Determine spacing between current accidental and the next accidental

      var extraWidth = 1;

      if (acc.type === 'n' && nextAcc) {
        var spacing = KeySignature.accidentalSpacing[nextAcc.type];

        if (spacing) {
          var isAbove = nextAcc.line >= acc.line;
          extraWidth = isAbove ? spacing.above : spacing.below;
        }
      } // Place the glyph on the stave


      this.placeGlyphOnLine(glyph, this.stave, acc.line);
      this.glyphs.push(glyph);
      var xPosition = this.xPositions[this.xPositions.length - 1];
      var 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.

  }, {
    key: "cancelKey",
    value: function cancelKey(spec) {
      this.formatted = false;
      this.cancelKeySpec = spec;
      return this;
    }
  }, {
    key: "convertToCancelAccList",
    value: function convertToCancelAccList(spec) {
      // Get the accidental list for the cancelled key signature
      var cancel_accList = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].keySignature(spec); // If the cancelled key has a different accidental type, ie: # vs b

      var 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

      var 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

      var cancelled = [];

      for (var i = 0; i < naturals; i++) {
        var index = i;

        if (!different_types) {
          index = cancel_accList.length - naturals + i;
        }

        var 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

  }, {
    key: "addToStave",
    value: function 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').

  }, {
    key: "convertAccLines",
    value: function convertAccLines(clef, type) {
      var accList = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.accList;
      var offset = 0.0; // if clef === "treble"

      var 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:


      var 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;
        }
      }
    }
  }, {
    key: "getPadding",
    value: function getPadding(index) {
      if (!this.formatted) this.format();
      return this.glyphs.length === 0 || !this.paddingForced && index < 2 ? 0 : this.padding;
    }
  }, {
    key: "getWidth",
    value: function getWidth() {
      if (!this.formatted) this.format();
      return this.width;
    }
  }, {
    key: "setKeySig",
    value: function 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).

  }, {
    key: "alterKey",
    value: function alterKey(alterKeySpec) {
      this.formatted = false;
      this.alterKeySpec = alterKeySpec;
      return this;
    }
  }, {
    key: "convertToAlterAccList",
    value: function convertToAlterAccList(alterKeySpec) {
      var max = Math.min(alterKeySpec.length, this.accList.length);

      for (var i = 0; i < max; ++i) {
        if (alterKeySpec[i]) {
          this.accList[i].type = alterKeySpec[i];
        }
      }
    }
  }, {
    key: "format",
    value: function format() {
      if (!this.stave) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('KeySignatureError', "Can't draw key signature without stave.");
      }

      this.width = 0;
      this.glyphs = [];
      this.xPositions = [0]; // initialize with initial x position

      this.accList = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].keySignature(this.keySpec);
      var accList = this.accList;
      var firstAccidentalType = accList.length > 0 ? accList[0].type : null;
      var cancelAccList;

      if (this.cancelKeySpec) {
        cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);
      }

      if (this.alterKeySpec) {
        this.convertToAlterAccList(this.alterKeySpec);
      }

      if (this.accList.length > 0) {
        var clef = (this.position === _stavemodifier__WEBPACK_IMPORTED_MODULE_2__["StaveModifier"].Position.END ? this.stave.endClef : this.stave.clef) || this.stave.clef;

        if (cancelAccList) {
          this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);
        }

        this.convertAccLines(clef, firstAccidentalType, accList);

        for (var i = 0; i < this.accList.length; ++i) {
          this.convertToGlyph(this.accList[i], this.accList[i + 1]);
        }
      }

      this.formatted = true;
    }
  }, {
    key: "draw",
    value: function draw() {
      if (!this.x) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('KeySignatureError', "Can't draw key signature without x.");
      }

      if (!this.stave) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('KeySignatureError', "Can't draw key signature without stave.");
      }

      if (!this.formatted) this.format();
      this.setRendered();

      for (var i = 0; i < this.glyphs.length; i++) {
        var glyph = this.glyphs[i];
        var x = this.x + this.xPositions[i];
        glyph.setStave(this.stave);
        glyph.setContext(this.stave.context);
        glyph.renderToStave(x);
      }
    }
  }]);

  return KeySignature;
}(_stavemodifier__WEBPACK_IMPORTED_MODULE_2__["StaveModifier"]);

/***/ }),

/***/ "./src/keysignote.js":
/*!***************************!*\
  !*** ./src/keysignote.js ***!
  \***************************/
/*! exports provided: KeySigNote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeySigNote", function() { return KeySigNote; });
/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.js");
/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }

function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author Mark Meeus 2019


var KeySigNote =
/*#__PURE__*/
function (_Note) {
  _inherits(KeySigNote, _Note);

  function KeySigNote(keySpec, cancelKeySpec, alterKeySpec) {
    var _this;

    _classCallCheck(this, KeySigNote);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(KeySigNote).call(this, {
      duration: 'b'
    }));

    _this.setAttribute('type', 'KeySigNote');

    _this.keySignature = new _keysignature__WEBPACK_IMPORTED_MODULE_1__["KeySignature"](keySpec, cancelKeySpec, alterKeySpec); // Note properties

    _this.ignore_ticks = true;
    return _this;
  }

  _createClass(KeySigNote, [{
    key: "getBoundingBox",
    value: function getBoundingBox() {
      return _get(_getPrototypeOf(KeySigNote.prototype), "getBoundingBox", this).call(this);
    }
  }, {
    key: "addToModifierContext",
    value: function addToModifierContext() {
      /* overridden to ignore */
      return this;
    }
  }, {
    key: "preFormat",
    value: function preFormat() {
      this.setPreFormatted(true);
      this.keySignature.setStave(this.stave);
      this.keySignature.format();
      this.setWidth(this.keySignature.width);
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      this.stave.checkContext();
      this.setRendered();
      this.keySignature.x = this.getAbsoluteX();
      this.keySignature.setContext(this.context);
      this.keySignature.draw();
    }
  }]);

  return KeySigNote;
}(_note__WEBPACK_IMPORTED_MODULE_0__["Note"]);

/***/ }),

/***/ "./src/modifier.js":
/*!*************************!*\
  !*** ./src/modifier.js ***!
  \*************************/
/*! exports provided: Modifier */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Modifier", function() { return Modifier; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
//
// `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.

 // To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.
// function L(...args) { if (Modifier.DEBUG) Vex.L('Vex.Flow.Modifier', args); }

var Modifier =
/*#__PURE__*/
function (_Element) {
  _inherits(Modifier, _Element);

  _createClass(Modifier, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'none';
    } // Modifiers can be positioned almost anywhere, relative to a note.

  }, {
    key: "Position",
    get: function get() {
      return {
        LEFT: 1,
        RIGHT: 2,
        ABOVE: 3,
        BELOW: 4
      };
    }
  }, {
    key: "PositionString",
    get: function get() {
      return {
        above: Modifier.Position.ABOVE,
        below: Modifier.Position.BELOW,
        left: Modifier.Position.LEFT,
        right: Modifier.Position.RIGHT
      };
    }
  }]);

  function Modifier() {
    var _this;

    _classCallCheck(this, Modifier);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Modifier).call(this));

    _this.setAttribute('type', 'Modifier');

    _this.width = 0; // Modifiers are attached to a note and an index. An index is a
    // specific head in a chord.

    _this.note = null;
    _this.index = null; // The `text_line` is reserved space above or below a stave.

    _this.text_line = 0;
    _this.position = Modifier.Position.LEFT;
    _this.modifier_context = null;
    _this.x_shift = 0;
    _this.y_shift = 0;
    _this.spacingFromNextModifier = 0;
    return _this;
  } // Called when position changes


  _createClass(Modifier, [{
    key: "reset",
    value: function reset() {} // do nothing
    // Every modifier has a category. The `ModifierContext` uses this to determine
    // the type and order of the modifiers.

  }, {
    key: "getCategory",
    value: function getCategory() {
      return Modifier.CATEGORY;
    } // Get and set modifier widths.

  }, {
    key: "getWidth",
    value: function getWidth() {
      return this.width;
    }
  }, {
    key: "setWidth",
    value: function setWidth(width) {
      this.width = width;
      return this;
    } // Get and set attached note (`StaveNote`, `TabNote`, etc.)

  }, {
    key: "getNote",
    value: function getNote() {
      return this.note;
    }
  }, {
    key: "setNote",
    value: function setNote(note) {
      this.note = note;
      return this;
    } // Get and set note index, which is a specific note in a chord.

  }, {
    key: "getIndex",
    value: function getIndex() {
      return this.index;
    }
  }, {
    key: "setIndex",
    value: function setIndex(index) {
      this.index = index;
      return this;
    } // Every modifier must be part of a `ModifierContext`.

  }, {
    key: "getModifierContext",
    value: function getModifierContext() {
      return this.modifier_context;
    }
  }, {
    key: "setModifierContext",
    value: function setModifierContext(c) {
      this.modifier_context = c;
      return this;
    } // Get and set articulation position.

  }, {
    key: "getPosition",
    value: function getPosition() {
      return this.position;
    }
  }, {
    key: "setPosition",
    value: function setPosition(position) {
      this.position = typeof position === 'string' ? Modifier.PositionString[position] : position;
      this.reset();
      return this;
    } // Set the `text_line` for the modifier.

  }, {
    key: "setTextLine",
    value: function setTextLine(line) {
      this.text_line = line;
      return this;
    } // Shift modifier down `y` pixels. Negative values shift up.

  }, {
    key: "setYShift",
    value: function setYShift(y) {
      this.y_shift = y;
      return this;
    }
  }, {
    key: "setSpacingFromNextModifier",
    value: function setSpacingFromNextModifier(x) {
      this.spacingFromNextModifier = x;
    }
  }, {
    key: "getSpacingFromNextModifier",
    value: function getSpacingFromNextModifier() {
      return this.spacingFromNextModifier;
    } // Shift modifier `x` pixels in the direction of the modifier. Negative values
    // shift reverse.

  }, {
    key: "setXShift",
    value: function setXShift(x) {
      this.x_shift = 0;

      if (this.position === Modifier.Position.LEFT) {
        this.x_shift -= x;
      } else {
        this.x_shift += x;
      }
    }
  }, {
    key: "getXShift",
    value: function getXShift() {
      return this.x_shift;
    } // Render the modifier onto the canvas.

  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('MethodNotImplemented', 'draw() not implemented for this modifier.');
    } // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset

  }, {
    key: "alignSubNotesWithNote",
    value: function alignSubNotesWithNote(subNotes, note) {
      // Shift over the tick contexts of each note
      var tickContext = note.getTickContext();
      var metrics = tickContext.getMetrics();
      var subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx + this.getSpacingFromNextModifier();
      subNotes.forEach(function (subNote) {
        var subTickContext = subNote.getTickContext();
        subNote.setStave(note.stave);
        subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render
      });
    }
  }]);

  return Modifier;
}(_element__WEBPACK_IMPORTED_MODULE_1__["Element"]);

/***/ }),

/***/ "./src/modifiercontext.js":
/*!********************************!*\
  !*** ./src/modifiercontext.js ***!
  \********************************/
/*! exports provided: ModifierContext */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ModifierContext", function() { return ModifierContext; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.js");
/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dot */ "./src/dot.js");
/* harmony import */ var _frethandfinger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./frethandfinger */ "./src/frethandfinger.js");
/* harmony import */ var _accidental__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./accidental */ "./src/accidental.js");
/* harmony import */ var _notesubgroup__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./notesubgroup */ "./src/notesubgroup.js");
/* harmony import */ var _gracenotegroup__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./gracenotegroup */ "./src/gracenotegroup.js");
/* harmony import */ var _strokes__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./strokes */ "./src/strokes.js");
/* harmony import */ var _stringnumber__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stringnumber */ "./src/stringnumber.js");
/* harmony import */ var _articulation__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./articulation */ "./src/articulation.js");
/* harmony import */ var _ornament__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./ornament */ "./src/ornament.js");
/* harmony import */ var _annotation__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./annotation */ "./src/annotation.js");
/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./bend */ "./src/bend.js");
/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.js");
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
//
// This class implements various types of modifiers to notes (e.g. bends,
// fingering positions etc.)













 // To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (ModifierContext.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.ModifierContext', args);
}

var ModifierContext =
/*#__PURE__*/
function () {
  function ModifierContext() {
    _classCallCheck(this, ModifierContext);

    // Current modifiers
    this.modifiers = {}; // Formatting data.

    this.preFormatted = false;
    this.postFormatted = false;
    this.width = 0;
    this.spacing = 0;
    this.state = {
      left_shift: 0,
      right_shift: 0,
      text_line: 0,
      top_text_line: 0
    }; // Add new modifiers to this array. The ordering is significant -- lower
    // modifiers are formatted and rendered before higher ones.

    this.PREFORMAT = [_stavenote__WEBPACK_IMPORTED_MODULE_1__["StaveNote"], _dot__WEBPACK_IMPORTED_MODULE_2__["Dot"], _frethandfinger__WEBPACK_IMPORTED_MODULE_3__["FretHandFinger"], _accidental__WEBPACK_IMPORTED_MODULE_4__["Accidental"], _strokes__WEBPACK_IMPORTED_MODULE_7__["Stroke"], _gracenotegroup__WEBPACK_IMPORTED_MODULE_6__["GraceNoteGroup"], _notesubgroup__WEBPACK_IMPORTED_MODULE_5__["NoteSubGroup"], _stringnumber__WEBPACK_IMPORTED_MODULE_8__["StringNumber"], _articulation__WEBPACK_IMPORTED_MODULE_9__["Articulation"], _ornament__WEBPACK_IMPORTED_MODULE_10__["Ornament"], _annotation__WEBPACK_IMPORTED_MODULE_11__["Annotation"], _bend__WEBPACK_IMPORTED_MODULE_12__["Bend"], _vibrato__WEBPACK_IMPORTED_MODULE_13__["Vibrato"]]; // If post-formatting is required for an element, add it to this array.

    this.POSTFORMAT = [_stavenote__WEBPACK_IMPORTED_MODULE_1__["StaveNote"]];
  }

  _createClass(ModifierContext, [{
    key: "addModifier",
    value: function addModifier(modifier) {
      var type = modifier.getCategory();
      if (!this.modifiers[type]) this.modifiers[type] = [];
      this.modifiers[type].push(modifier);
      modifier.setModifierContext(this);
      this.preFormatted = false;
      return this;
    }
  }, {
    key: "getModifiers",
    value: function getModifiers(type) {
      return this.modifiers[type];
    }
  }, {
    key: "getWidth",
    value: function getWidth() {
      return this.width;
    }
  }, {
    key: "getLeftShift",
    value: function getLeftShift() {
      return this.state.left_shift;
    }
  }, {
    key: "getRightShift",
    value: function getRightShift() {
      return this.state.right_shift;
    }
  }, {
    key: "getState",
    value: function getState() {
      return this.state;
    }
  }, {
    key: "getMetrics",
    value: function getMetrics() {
      if (!this.formatted) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('UnformattedModifier', 'Unformatted modifier has no metrics.');
      }

      return {
        width: this.state.left_shift + this.state.right_shift + this.spacing,
        spacing: this.spacing
      };
    }
  }, {
    key: "preFormat",
    value: function preFormat() {
      var _this = this;

      if (this.preFormatted) return;
      this.PREFORMAT.forEach(function (modifier) {
        L('Preformatting ModifierContext: ', modifier.CATEGORY);
        modifier.format(_this.getModifiers(modifier.CATEGORY), _this.state, _this);
      }); // Update width of this modifier context

      this.width = this.state.left_shift + this.state.right_shift;
      this.preFormatted = true;
    }
  }, {
    key: "postFormat",
    value: function postFormat() {
      var _this2 = this;

      if (this.postFormatted) return;
      this.POSTFORMAT.forEach(function (modifier) {
        L('Postformatting ModifierContext: ', modifier.CATEGORY);
        modifier.postFormat(_this2.getModifiers(modifier.CATEGORY), _this2);
      });
    }
  }]);

  return ModifierContext;
}();

/***/ }),

/***/ "./src/multimeasurerest.js":
/*!*********************************!*\
  !*** ./src/multimeasurerest.js ***!
  \*********************************/
/*! exports provided: MultiMeasureRest */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MultiMeasureRest", function() { return MultiMeasureRest; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./notehead */ "./src/notehead.js");
/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.js");
/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// VexFlow - Music Engraving for HTML5
// Copyright Mohit Muthanna 2010
//
// This class implements multiple measure rests







var semibrave_rest;

function get_semibrave_rest() {
  if (!semibrave_rest) {
    var notehead = new _notehead__WEBPACK_IMPORTED_MODULE_4__["NoteHead"]({
      duration: 'w',
      note_type: 'r'
    });
    semibrave_rest = {
      glyph_font_scale: notehead.render_options.glyph_font_scale,
      glyph_code: notehead.glyph_code,
      width: notehead.getWidth()
    };
  }

  return semibrave_rest;
}

var MultiMeasureRest =
/*#__PURE__*/
function (_Element) {
  _inherits(MultiMeasureRest, _Element);

  // Parameters:
  // * `number_of_measures` - Number of measures.
  // * `options` - The options object.
  //   * `show_number` - Show number of measures string or not.
  //   * `number_line` -  Staff line to render the number of measures string.
  //   * `number_glyph_point` - Size of the number of measures string glyphs.
  //   * `padding_left` - Left padding from stave x.
  //   * `padding_right` - Right padding from stave end x.
  //   * `line` - Staff line to render rest line or rest symbols.
  //   * `spacing_between_lines_px` - Spacing between staff lines to
  // resolve serif height or {2-bar and 4-bar}rest symbol height.
  //   * `line_thickness` - Rest line thickness.
  //   * `serif_thickness` - Rest serif line thickness.
  //   * `use_symbols` - Use rest symbols or not.
  //   * `symbol_spacing` - Spacing between each rest symbol glyphs.
  //   * `semibrave_rest_glyph_scale` - Size of the semibrave(1-bar) rest symbol.
  function MultiMeasureRest(number_of_measures, options) {
    var _this;

    _classCallCheck(this, MultiMeasureRest);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(MultiMeasureRest).call(this));

    _this.setAttribute('type', 'MultiMeasureRest');

    var point = _this.musicFont.lookupMetric('digits.point');

    var fontLineShift = _this.musicFont.lookupMetric('digits.shiftLine', 0);

    _this.render_options = {
      show_number: true,
      number_line: -0.5,
      number_glyph_point: point,
      // same as TimeSignature.
      padding_left: undefined,
      padding_right: undefined,
      line: 2,
      spacing_between_lines_px: 10,
      // same as Stave.
      line_thickness: undefined,
      serif_thickness: 2,
      use_symbols: false,
      symbol_spacing: undefined,

      /* same as NoteHead. */
      semibrave_rest_glyph_scale: _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].DEFAULT_NOTATION_FONT_SCALE
    };
    _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(_this.render_options, options);
    _this.render_options.number_line += fontLineShift;
    _this.number_of_measures = number_of_measures;
    _this.xs = {
      left: NaN,
      right: NaN
    };
    return _this;
  }

  _createClass(MultiMeasureRest, [{
    key: "getXs",
    value: function getXs() {
      return this.xs;
    }
  }, {
    key: "setStave",
    value: function setStave(stave) {
      this.stave = stave;
      return this;
    }
  }, {
    key: "getStave",
    value: function getStave() {
      return this.stave;
    }
  }, {
    key: "drawLine",
    value: function drawLine(ctx, left, right, sbl) {
      var y = this.stave.getYForLine(this.render_options.line);
      var padding = (right - left) * 0.1;
      left += padding;
      right -= padding;
      var serif = {
        thickness: this.render_options.serif_thickness,
        height: sbl
      };
      var lineThicknessHalf = sbl * 0.25;

      if (!isNaN(this.render_options.line_thickness)) {
        lineThicknessHalf = this.render_options.line_thickness * 0.5;
      }

      ctx.save();
      ctx.beginPath();
      ctx.moveTo(left, y - sbl);
      ctx.lineTo(left + serif.thickness, y - sbl);
      ctx.lineTo(left + serif.thickness, y - lineThicknessHalf);
      ctx.lineTo(right - serif.thickness, y - lineThicknessHalf);
      ctx.lineTo(right - serif.thickness, y - sbl);
      ctx.lineTo(right, y - sbl);
      ctx.lineTo(right, y + sbl);
      ctx.lineTo(right - serif.thickness, y + sbl);
      ctx.lineTo(right - serif.thickness, y + lineThicknessHalf);
      ctx.lineTo(left + serif.thickness, y + lineThicknessHalf);
      ctx.lineTo(left + serif.thickness, y + sbl);
      ctx.lineTo(left, y + sbl);
      ctx.closePath();
      ctx.fill();
    }
  }, {
    key: "drawSymbols",
    value: function drawSymbols(ctx, left, right, sbl) {
      var n4 = Math.floor(this.number_of_measures / 4);
      var n = this.number_of_measures % 4;
      var n2 = Math.floor(n / 2);
      var n1 = n % 2;
      var semibrave_rest = get_semibrave_rest();
      var semibrave_rest_width = semibrave_rest.width * (this.render_options.semibrave_rest_glyph_scale / semibrave_rest.glyph_font_scale);
      var glyphs = {
        2: {
          width: semibrave_rest_width * 0.5,
          height: sbl
        },
        1: {
          width: semibrave_rest_width
        }
      };
      var spacing = semibrave_rest_width * 1.35;

      if (!isNaN(this.render_options.symbol_spacing)) {
        spacing = this.render_options.symbol_spacing;
      }

      var width = n4 * glyphs[2].width + n2 * glyphs[2].width + n1 * glyphs[1].width + (n4 + n2 + n1 - 1) * spacing;
      var x = left + (right - left) * 0.5 - width * 0.5;
      var yTop = this.stave.getYForLine(this.render_options.line - 1);
      var yMiddle = this.stave.getYForLine(this.render_options.line);
      var yBottom = this.stave.getYForLine(this.render_options.line + 1);
      ctx.save();
      ctx.setStrokeStyle('none');
      ctx.setLineWidth(0);

      for (var 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 (var _i = 0; _i < n2; ++_i) {
        ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);
        x += glyphs[2].width + spacing;
      }

      for (var _i2 = 0; _i2 < n1; ++_i2) {
        _glyph__WEBPACK_IMPORTED_MODULE_3__["Glyph"].renderGlyph(ctx, x, yTop, this.render_options.semibrave_rest_glyph_scale, semibrave_rest.glyph_code);
        x += glyphs[1].width + spacing;
      }

      ctx.restore();
    }
  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();
      this.setRendered();
      var ctx = this.context;
      var stave = this.stave;
      var sbl = this.render_options.spacing_between_lines_px;
      var left = stave.getNoteStartX();
      var right = stave.getNoteEndX(); // FIXME: getNoteStartX() returns x+5(barline width) and
      // getNoteEndX() returns x + width(no barline width) by default. how to fix?

      var begModifiers = stave.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_5__["StaveModifier"].Position.BEGIN);

      if (begModifiers.length === 1 && begModifiers[0].getCategory() === 'barlines') {
        left -= begModifiers[0].getWidth();
      }

      if (!isNaN(this.render_options.padding_left)) {
        left = stave.getX() + this.render_options.padding_left;
      }

      if (!isNaN(this.render_options.padding_right)) {
        right = stave.getX() + stave.getWidth() - this.render_options.padding_right;
      }

      this.xs.left = left;
      this.xs.right = right;

      if (this.render_options.use_symbols) {
        this.drawSymbols(ctx, left, right, sbl);
      } else {
        this.drawLine(ctx, left, right, sbl);
      }

      if (this.render_options.show_number) {
        var timeSpec = '/' + this.number_of_measures;
        var timeSig = new _timesignature__WEBPACK_IMPORTED_MODULE_6__["TimeSignature"](null, undefined, false);
        timeSig.point = this.render_options.number_glyph_point;
        timeSig.setTimeSig(timeSpec);
        timeSig.setStave(stave);
        timeSig.x = left + (right - left) * 0.5 - timeSig.timeSig.glyph.getMetrics().width * 0.5;
        timeSig.bottomLine = this.render_options.number_line;
        timeSig.setContext(ctx).draw();
      }
    }
  }]);

  return MultiMeasureRest;
}(_element__WEBPACK_IMPORTED_MODULE_2__["Element"]);

/***/ }),

/***/ "./src/music.js":
/*!**********************!*\
  !*** ./src/music.js ***!
  \**********************/
/*! exports provided: Music */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Music", function() { return Music; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// This class implements some standard music theory routines.

var Music =
/*#__PURE__*/
function () {
  function Music() {
    _classCallCheck(this, Music);
  }

  _createClass(Music, [{
    key: "isValidNoteValue",
    value: function isValidNoteValue(note) {
      if (note == null || note < 0 || note >= Music.NUM_TONES) {
        return false;
      }

      return true;
    }
  }, {
    key: "isValidIntervalValue",
    value: function isValidIntervalValue(interval) {
      return this.isValidNoteValue(interval);
    }
  }, {
    key: "getNoteParts",
    value: function getNoteParts(noteString) {
      if (!noteString || noteString.length < 1) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', 'Invalid note name: ' + noteString);
      }

      if (noteString.length > 3) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', 'Invalid note name: ' + noteString);
      }

      var note = noteString.toLowerCase();
      var regex = /^([cdefgab])(b|bb|n|#|##)?$/;
      var match = regex.exec(note);

      if (match != null) {
        var root = match[1];
        var accidental = match[2];
        return {
          root: root,
          accidental: accidental
        };
      } else {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', 'Invalid note name: ' + noteString);
      }
    }
  }, {
    key: "getKeyParts",
    value: function getKeyParts(keyString) {
      if (!keyString || keyString.length < 1) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', 'Invalid key: ' + keyString);
      }

      var key = keyString.toLowerCase(); // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.

      var regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;
      var match = regex.exec(key);

      if (match != null) {
        var root = match[1];
        var accidental = match[2];
        var type = match[3]; // Unspecified type implies major

        if (!type) type = 'M';
        return {
          root: root,
          accidental: accidental,
          type: type
        };
      } else {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "Invalid key: ".concat(keyString));
      }
    }
  }, {
    key: "getNoteValue",
    value: function getNoteValue(noteString) {
      var value = Music.noteValues[noteString];

      if (value == null) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "Invalid note name: ".concat(noteString));
      }

      return value.int_val;
    }
  }, {
    key: "getIntervalValue",
    value: function getIntervalValue(intervalString) {
      var value = Music.intervals[intervalString];

      if (value == null) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "Invalid interval name: ".concat(intervalString));
      }

      return value;
    }
  }, {
    key: "getCanonicalNoteName",
    value: function getCanonicalNoteName(noteValue) {
      if (!this.isValidNoteValue(noteValue)) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "Invalid note value: ".concat(noteValue));
      }

      return Music.canonical_notes[noteValue];
    }
  }, {
    key: "getCanonicalIntervalName",
    value: function getCanonicalIntervalName(intervalValue) {
      if (!this.isValidIntervalValue(intervalValue)) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "Invalid interval value: ".concat(intervalValue));
      }

      return Music.diatonic_intervals[intervalValue];
    }
    /* Given a note, interval, and interval direction, product the
     * relative note.
     */

  }, {
    key: "getRelativeNoteValue",
    value: function getRelativeNoteValue(noteValue, intervalValue, direction) {
      if (direction == null) direction = 1;

      if (direction !== 1 && direction !== -1) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "Invalid direction: ".concat(direction));
      }

      var sum = (noteValue + direction * intervalValue) % Music.NUM_TONES;
      if (sum < 0) sum += Music.NUM_TONES;
      return sum;
    }
  }, {
    key: "getRelativeNoteName",
    value: function getRelativeNoteName(root, noteValue) {
      var parts = this.getNoteParts(root);
      var rootValue = this.getNoteValue(parts.root);
      var interval = noteValue - rootValue;

      if (Math.abs(interval) > Music.NUM_TONES - 3) {
        var multiplier = 1;
        if (interval > 0) multiplier = -1; // Possibly wrap around. (Add +1 for modulo operator)

        var reverse_interval = (noteValue + 1 + (rootValue + 1)) % Music.NUM_TONES * multiplier;

        if (Math.abs(reverse_interval) > 2) {
          throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "Notes not related: ".concat(root, ", ").concat(noteValue, ")"));
        } else {
          interval = reverse_interval;
        }
      }

      if (Math.abs(interval) > 2) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "Notes not related: ".concat(root, ", ").concat(noteValue, ")"));
      }

      var relativeNoteName = parts.root;

      if (interval > 0) {
        for (var i = 1; i <= interval; ++i) {
          relativeNoteName += '#';
        }
      } else if (interval < 0) {
        for (var _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).
     */

  }, {
    key: "getScaleTones",
    value: function getScaleTones(key, intervals) {
      var tones = [key];
      var nextNote = key;

      for (var i = 0; i < intervals.length; i += 1) {
        nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);
        if (nextNote !== key) tones.push(nextNote);
      }

      return tones;
    }
    /* Returns the interval of a note, given a diatonic scale.
     *
     * E.g., Given the scale C, and the note E, returns M3
     */

  }, {
    key: "getIntervalBetween",
    value: function getIntervalBetween(note1, note2, direction) {
      if (direction == null) direction = 1;

      if (direction !== 1 && direction !== -1) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "Invalid direction: ".concat(direction));
      }

      if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "Invalid notes: ".concat(note1, ", ").concat(note2));
      }

      var 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.

  }, {
    key: "createScaleMap",
    value: function createScaleMap(keySignature) {
      var keySigParts = this.getKeyParts(keySignature);
      var scaleName = Music.scaleTypes[keySigParts.type];
      var keySigString = keySigParts.root;
      if (keySigParts.accidental) keySigString += keySigParts.accidental;
      if (!scaleName) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', 'Unsupported key type: ' + keySignature);
      var scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);
      var noteLocation = Music.root_indices[keySigParts.root];
      var scaleMap = {};

      for (var i = 0; i < Music.roots.length; ++i) {
        var index = (noteLocation + i) % Music.roots.length;
        var rootName = Music.roots[index];
        var noteName = this.getRelativeNoteName(rootName, scale[i]);

        if (noteName.length === 1) {
          noteName += 'n';
        }

        scaleMap[rootName] = noteName;
      }

      return scaleMap;
    }
  }], [{
    key: "NUM_TONES",
    get: function get() {
      return 12;
    }
  }, {
    key: "roots",
    get: function get() {
      return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];
    }
  }, {
    key: "root_values",
    get: function get() {
      return [0, 2, 4, 5, 7, 9, 11];
    }
  }, {
    key: "root_indices",
    get: function get() {
      return {
        'c': 0,
        'd': 1,
        'e': 2,
        'f': 3,
        'g': 4,
        'a': 5,
        'b': 6
      };
    }
  }, {
    key: "canonical_notes",
    get: function get() {
      return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b'];
    }
  }, {
    key: "diatonic_intervals",
    get: function get() {
      return ['unison', 'm2', 'M2', 'm3', 'M3', 'p4', 'dim5', 'p5', 'm6', 'M6', 'b7', 'M7', 'octave'];
    }
  }, {
    key: "diatonic_accidentals",
    get: function get() {
      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
        }
      };
    }
  }, {
    key: "intervals",
    get: function get() {
      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
      };
    }
  }, {
    key: "scales",
    get: function get() {
      return {
        major: [2, 2, 1, 2, 2, 2, 1],
        dorian: [2, 1, 2, 2, 2, 1, 2],
        mixolydian: [2, 2, 1, 2, 2, 1, 2],
        minor: [2, 1, 2, 2, 1, 2, 2]
      };
    }
  }, {
    key: "scaleTypes",
    get: function get() {
      return {
        'M': Music.scales.major,
        'm': Music.scales.minor
      };
    }
  }, {
    key: "accidentals",
    get: function get() {
      return ['bb', 'b', 'n', '#', '##'];
    }
  }, {
    key: "noteValues",
    get: function get() {
      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
        }
      };
    }
  }]);

  return Music;
}();

/***/ }),

/***/ "./src/note.js":
/*!*********************!*\
  !*** ./src/note.js ***!
  \*********************/
/*! exports provided: Note */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Note", function() { return Note; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tickable */ "./src/tickable.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
//
// This file 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.



var Note =
/*#__PURE__*/
function (_Tickable) {
  _inherits(Note, _Tickable);

  _createClass(Note, null, [{
    key: "plotMetrics",
    // Debug helper. Displays various note metrics for the given
    // note.
    value: function plotMetrics(ctx, note, yPos) {
      var metrics = note.getMetrics();
      var xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;
      var xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;
      var xAbs = note.getAbsoluteX();
      var xPost1 = note.getAbsoluteX() + metrics.notePx;
      var xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;
      var xEnd = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx + metrics.modRightPx;
      var xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);
      var xWidth = xEnd - xStart;
      ctx.save();
      ctx.setFont('Arial', 8, '');
      ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);
      var y = yPos + 7;

      function stroke(x1, x2, color) {
        var yy = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 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

      _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].drawDot(ctx, xAbs + note.getXShift(), y, 'blue');
      var formatterMetrics = note.getFormatterMetrics();

      if (formatterMetrics.iterations > 0) {
        var spaceDeviation = formatterMetrics.space.deviation;
        var prefix = spaceDeviation >= 0 ? '+' : '';
        ctx.setFillStyle('red');
        ctx.fillText(prefix + Math.round(spaceDeviation), xAbs + note.getXShift(), yPos - 10);
      }

      ctx.restore();
    }
  }, {
    key: "parseDuration",
    value: function parseDuration(durationString) {
      if (typeof durationString !== 'string') {
        return null;
      }

      var regexp = /(\d*\/?\d+|[a-z])(d*)([nrhms]|$)/;
      var result = regexp.exec(durationString);

      if (!result) {
        return null;
      }

      var duration = result[1];
      var dots = result[2].length;
      var type = result[3] || 'n';
      return {
        duration: duration,
        dots: dots,
        type: type
      };
    }
  }, {
    key: "parseNoteStruct",
    value: function parseNoteStruct(noteStruct) {
      var durationString = noteStruct.duration;
      var customTypes = []; // Preserve backwards-compatibility

      var durationProps = Note.parseDuration(durationString);

      if (!durationProps) {
        return null;
      } // If specified type is invalid, return null


      var type = noteStruct.type;

      if (type && !_tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].getGlyphProps.validTypes[type]) {
        return null;
      } // If no type specified, check duration or custom types


      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(function (k, i) {
            var 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


      var ticks = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].durationToTicks(durationProps.duration);

      if (ticks == null) {
        return null;
      } // Are there any dots?


      var dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;

      if (typeof dots !== 'number') {
        return null;
      } // Add ticks as necessary depending on the numbr of dots


      var currentTicks = ticks;

      for (var i = 0; i < dots; i++) {
        if (currentTicks <= 1) return null;
        currentTicks = currentTicks / 2;
        ticks += currentTicks;
      }

      return {
        duration: durationProps.duration,
        type: type,
        customTypes: customTypes,
        dots: dots,
        ticks: ticks
      };
    } // Every note is a tickable, i.e., it can be mutated by the `Formatter` class for
    // positioning and layout.
    // To create a new note you need to provide a `noteStruct`, which consists
    // of the following fields:
    //
    // `type`: The note type (e.g., `r` for rest, `s` for slash notes, etc.)
    // `dots`: The number of dots, which affects the duration.
    // `duration`: The time length (e.g., `q` for quarter, `h` for half, `8` for eighth etc.)
    //
    // The range of values for these parameters are available in `src/tables.js`.

  }, {
    key: "CATEGORY",
    get: function get() {
      return 'note';
    }
  }]);

  function Note(noteStruct) {
    var _this;

    _classCallCheck(this, Note);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Note).call(this));

    _this.setAttribute('type', 'Note');

    if (!noteStruct) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', 'Note must have valid initialization data to identify duration and type.');
    } // Parse `noteStruct` and get note properties.


    var initStruct = Note.parseNoteStruct(noteStruct);

    if (!initStruct) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', "Invalid note initialization object: ".concat(JSON.stringify(noteStruct)));
    } // Set note properties from parameters.


    _this.duration = initStruct.duration;
    _this.dots = initStruct.dots;
    _this.noteType = initStruct.type;
    _this.customTypes = initStruct.customTypes;

    if (noteStruct.duration_override) {
      // Custom duration
      _this.setDuration(noteStruct.duration_override);
    } else {
      // Default duration
      _this.setIntrinsicTicks(initStruct.ticks);
    }

    _this.modifiers = []; // Get the glyph code for this note from the font.

    _this.glyph = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].getGlyphProps(_this.duration, _this.noteType);
    _this.customGlyphs = _this.customTypes.map(function (t) {
      return _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].getGlyphProps(_this.duration, t);
    });

    if (_this.positions && (_typeof(_this.positions) !== 'object' || !_this.positions.length)) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', 'Note keys must be array type.');
    } // Note to play for audio players.


    _this.playNote = null; // Positioning contexts used by the Formatter.

    _this.tickContext = null; // The current tick context.

    _this.modifierContext = null;
    _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.voice = null; // The voice that this note is in

    _this.preFormatted = false; // Is this note preFormatted?

    _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.stave = null;
    _this.render_options = {
      annotation_spacing: 5
    };
    return _this;
  } // Get and set the play note, which is arbitrary data that can be used by an
  // audio player.


  _createClass(Note, [{
    key: "getPlayNote",
    value: function getPlayNote() {
      return this.playNote;
    }
  }, {
    key: "setPlayNote",
    value: function setPlayNote(note) {
      this.playNote = note;
      return this;
    } // Don't play notes by default, call them rests. This is also used by things like
    // beams and dots for positioning.

  }, {
    key: "isRest",
    value: function isRest() {
      return false;
    } // TODO(0xfe): Why is this method here?

  }, {
    key: "addStroke",
    value: function addStroke(index, stroke) {
      stroke.setNote(this);
      stroke.setIndex(index);
      this.modifiers.push(stroke);
      this.setPreFormatted(false);
      return this;
    } // Get and set the target stave.

  }, {
    key: "getStave",
    value: function getStave() {
      return this.stave;
    }
  }, {
    key: "setStave",
    value: function setStave(stave) {
      this.stave = stave;
      this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.

      this.context = this.stave.context;
      return this;
    } // `Note` is not really a modifier, but is used in
    // a `ModifierContext`.

  }, {
    key: "getCategory",
    value: function getCategory() {
      return Note.CATEGORY;
    } // Set the rendering context for the note.

  }, {
    key: "setContext",
    value: function setContext(context) {
      this.context = context;
      return this;
    } // Get and set spacing to the left and right of the notes.

  }, {
    key: "getLeftDisplacedHeadPx",
    value: function getLeftDisplacedHeadPx() {
      return this.leftDisplacedHeadPx;
    }
  }, {
    key: "getRightDisplacedHeadPx",
    value: function getRightDisplacedHeadPx() {
      return this.rightDisplacedHeadPx;
    }
  }, {
    key: "setLeftDisplacedHeadPx",
    value: function setLeftDisplacedHeadPx(x) {
      this.leftDisplacedHeadPx = x;
      return this;
    }
  }, {
    key: "setRightDisplacedHeadPx",
    value: function setRightDisplacedHeadPx(x) {
      this.rightDisplacedHeadPx = x;
      return this;
    } // Returns true if this note has no duration (e.g., bar notes, spacers, etc.)

  }, {
    key: "shouldIgnoreTicks",
    value: function shouldIgnoreTicks() {
      return this.ignore_ticks;
    } // Get the stave line number for the note.

  }, {
    key: "getLineNumber",
    value: function getLineNumber() {
      return 0;
    } // Get the stave line number for rest.

  }, {
    key: "getLineForRest",
    value: function getLineForRest() {
      return 0;
    } // Get the glyph associated with this note.

  }, {
    key: "getGlyph",
    value: function getGlyph() {
      return this.glyph;
    }
  }, {
    key: "getGlyphWidth",
    value: function getGlyphWidth() {
      // TODO: FIXME (multiple potential values for this.glyph)
      if (this.glyph) {
        if (this.glyph.getMetrics) {
          return this.glyph.getMetrics().width;
        } else if (this.glyph.getWidth) {
          return this.glyph.getWidth(this.render_options.glyph_font_scale);
        }
      }

      return 0;
    } // Set and get Y positions for this note. Each Y value is associated with
    // an individual pitch/key within the note/chord.

  }, {
    key: "setYs",
    value: function setYs(ys) {
      this.ys = ys;
      return this;
    }
  }, {
    key: "getYs",
    value: function getYs() {
      if (this.ys.length === 0) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('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.

  }, {
    key: "getYForTopText",
    value: function getYForTopText(text_line) {
      if (!this.stave) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoStave', 'No stave attached to this note.');
      }

      return this.stave.getYForTopText(text_line);
    } // Get a `BoundingBox` for this note.

  }, {
    key: "getBoundingBox",
    value: function getBoundingBox() {
      return null;
    } // Returns the voice that this note belongs in.

  }, {
    key: "getVoice",
    value: function getVoice() {
      if (!this.voice) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoVoice', 'Note has no voice.');
      return this.voice;
    } // Attach this note to `voice`.

  }, {
    key: "setVoice",
    value: function setVoice(voice) {
      this.voice = voice;
      this.preFormatted = false;
      return this;
    } // Get and set the `TickContext` for this note.

  }, {
    key: "getTickContext",
    value: function getTickContext() {
      return this.tickContext;
    }
  }, {
    key: "setTickContext",
    value: function setTickContext(tc) {
      this.tickContext = tc;
      this.preFormatted = false;
      return this;
    } // Accessors for the note type.

  }, {
    key: "getDuration",
    value: function getDuration() {
      return this.duration;
    }
  }, {
    key: "isDotted",
    value: function isDotted() {
      return this.dots > 0;
    }
  }, {
    key: "hasStem",
    value: function hasStem() {
      return false;
    }
  }, {
    key: "getDots",
    value: function getDots() {
      return this.dots;
    }
  }, {
    key: "getNoteType",
    value: function getNoteType() {
      return this.noteType;
    }
  }, {
    key: "setBeam",
    value: function setBeam() {
      return this;
    } // ignore parameters
    // Attach this note to a modifier context.

  }, {
    key: "setModifierContext",
    value: function setModifierContext(mc) {
      this.modifierContext = mc;
      return this;
    } // Attach a modifier to this note.

  }, {
    key: "addModifier",
    value: function addModifier(modifier) {
      var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
      modifier.setNote(this);
      modifier.setIndex(index);
      this.modifiers.push(modifier);
      this.setPreFormatted(false);
      return this;
    } // Get the coordinates for where modifiers begin.

  }, {
    key: "getModifierStartXY",
    value: function getModifierStartXY() {
      if (!this.preFormatted) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note");
      }

      return {
        x: this.getAbsoluteX(),
        y: this.ys[0]
      };
    } // Get bounds and metrics for this note.
    //
    // Returns a struct with fields:
    // `width`: The total width of the note (including modifiers.)
    // `notePx`: The width of the note head only.
    // `left_shift`: The horizontal displacement of the note.
    // `modLeftPx`: Start `X` for left modifiers.
    // `modRightPx`: Start `X` for right modifiers.
    // `leftDisplacedHeadPx`: Extra space on left of note.
    // `rightDisplacedHeadPx`: Extra space on right of note.

  }, {
    key: "getMetrics",
    value: function getMetrics() {
      if (!this.preFormatted) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('UnformattedNote', "Can't call getMetrics on an unformatted note.");
      }

      var modLeftPx = this.modifierContext ? this.modifierContext.state.left_shift : 0;
      var modRightPx = this.modifierContext ? this.modifierContext.state.right_shift : 0;
      var width = this.getWidth();
      var glyphWidth = this.getGlyphWidth();
      var notePx = width - modLeftPx // subtract left modifiers
      - modRightPx // subtract right modifiers
      - this.leftDisplacedHeadPx // subtract left displaced head
      - this.rightDisplacedHeadPx; // subtract right displaced head

      return {
        // ----------
        // NOTE: If you change this, remember to update MockTickable in the tests/ directory.
        // --------------
        width: width,
        glyphWidth: glyphWidth,
        notePx: notePx,
        // Modifier spacing.
        modLeftPx: modLeftPx,
        modRightPx: modRightPx,
        // Displaced note head on left or right.
        leftDisplacedHeadPx: this.leftDisplacedHeadPx,
        rightDisplacedHeadPx: this.rightDisplacedHeadPx
      };
    } // 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.

  }, {
    key: "getAbsoluteX",
    value: function getAbsoluteX() {
      if (!this.tickContext) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoTickContext', 'Note needs a TickContext assigned for an X-Value');
      } // Position note to left edge of tick context.


      var x = this.tickContext.getX();

      if (this.stave) {
        x += this.stave.getNoteStartX() + this.musicFont.lookupMetric('stave.padding');
      }

      if (this.isCenterAligned()) {
        x += this.getCenterXShift();
      }

      return x;
    }
  }, {
    key: "setPreFormatted",
    value: function setPreFormatted(value) {
      this.preFormatted = value;
    }
  }]);

  return Note;
}(_tickable__WEBPACK_IMPORTED_MODULE_2__["Tickable"]);

/***/ }),

/***/ "./src/notehead.js":
/*!*************************!*\
  !*** ./src/notehead.js ***!
  \*************************/
/*! exports provided: NoteHead */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NoteHead", function() { return NoteHead; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./note */ "./src/note.js");
/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.js");
/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }

function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
//
// This file implements `NoteHeads`. `NoteHeads` are typically not manipulated
// directly, but used internally in `StaveNote`.
//
// See `tests/notehead_tests.js` for usage examples.





 // To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (NoteHead.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.NoteHead', args);
} // Draw slashnote head manually. No glyph exists for this.
//
// Parameters:
// * `ctx`: the Canvas context
// * `duration`: the duration of the note. ex: "4"
// * `x`: the x coordinate to draw at
// * `y`: the y coordinate to draw at
// * `stem_direction`: the direction of the stem


function drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {
  var width = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].SLASH_NOTEHEAD_WIDTH;
  ctx.save();
  ctx.setLineWidth(_tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].STEM_WIDTH);
  var fill = false;

  if (_tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].durationToNumber(duration) > 2) {
    fill = true;
  }

  if (!fill) x -= _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].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_1__["Flow"].durationToFraction(duration).equals(0.5)) {
    var breve_lines = [-3, -1, width + 1, width + 3];

    for (var 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();
}

var NoteHead =
/*#__PURE__*/
function (_Note) {
  _inherits(NoteHead, _Note);

  _createClass(NoteHead, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'notehead';
    }
  }]);

  function NoteHead(head_options) {
    var _this;

    _classCallCheck(this, NoteHead);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(NoteHead).call(this, head_options));

    _this.setAttribute('type', 'NoteHead');

    _this.index = head_options.index;
    _this.x = head_options.x || 0;
    _this.y = head_options.y || 0;
    _this.note_type = head_options.note_type;
    _this.duration = head_options.duration;
    _this.displaced = head_options.displaced || false;
    _this.stem_direction = head_options.stem_direction || _stavenote__WEBPACK_IMPORTED_MODULE_4__["StaveNote"].STEM_UP;
    _this.line = head_options.line; // Get glyph code based on duration and note type. This could be
    // regular notes, rests, or other custom codes.

    _this.glyph = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].getGlyphProps(_this.duration, _this.note_type);

    if (!_this.glyph) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', "No glyph found for duration '".concat(_this.duration, "' and type '").concat(_this.note_type, "'"));
    }

    _this.glyph_code = _this.glyph.code_head;
    _this.x_shift = head_options.x_shift || 0;

    if (head_options.custom_glyph_code) {
      _this.custom_glyph = true;
      _this.glyph_code = head_options.custom_glyph_code;
      _this.stem_up_x_offset = head_options.stem_up_x_offset || 0;
      _this.stem_down_x_offset = head_options.stem_down_x_offset || 0;
    }

    _this.style = head_options.style;
    _this.slashed = head_options.slashed;
    _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(_this.render_options, {
      // font size for note heads
      glyph_font_scale: head_options.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].DEFAULT_NOTATION_FONT_SCALE,
      // number of stroke px to the left and right of head
      stroke_px: 3
    });

    _this.setWidth(_this.glyph.getWidth(_this.render_options.glyph_font_scale));

    return _this;
  }

  _createClass(NoteHead, [{
    key: "getCategory",
    value: function getCategory() {
      return NoteHead.CATEGORY;
    } // Get the width of the notehead

  }, {
    key: "getWidth",
    value: function getWidth() {
      return this.width;
    } // Determine if the notehead is displaced

  }, {
    key: "isDisplaced",
    value: function isDisplaced() {
      return this.displaced === true;
    } // Get the glyph data

  }, {
    key: "getGlyph",
    value: function getGlyph() {
      return this.glyph;
    } // Set the X coordinate

  }, {
    key: "setX",
    value: function setX(x) {
      this.x = x;
      return this;
    } // get/set the Y coordinate

  }, {
    key: "getY",
    value: function getY() {
      return this.y;
    }
  }, {
    key: "setY",
    value: function setY(y) {
      this.y = y;
      return this;
    } // Get/set the stave line the notehead is placed on

  }, {
    key: "getLine",
    value: function getLine() {
      return this.line;
    }
  }, {
    key: "setLine",
    value: function setLine(line) {
      this.line = line;
      return this;
    } // Get the canvas `x` coordinate position of the notehead.

  }, {
    key: "getAbsoluteX",
    value: function 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
      var x = !this.preFormatted ? this.x : _get(_getPrototypeOf(NoteHead.prototype), "getAbsoluteX", this).call(this); // 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

      var displacementStemAdjustment = _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].WIDTH / 2;
      var fontShift = this.musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;
      var displacedFontShift = this.musicFont.lookupMetric('noteHead.displaced.shiftX', 0) * this.stem_direction;
      return x + fontShift + (this.displaced ? (this.width - displacementStemAdjustment) * this.stem_direction + displacedFontShift : 0);
    } // Get the `BoundingBox` for the `NoteHead`

  }, {
    key: "getBoundingBox",
    value: function getBoundingBox() {
      if (!this.preFormatted) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('UnformattedNote', "Can't call getBoundingBox on an unformatted note.");
      }

      var spacing = this.stave.getSpacingBetweenLines();
      var half_spacing = spacing / 2;
      var min_y = this.y - half_spacing;
      return new _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);
    } // Set notehead to a provided `stave`

  }, {
    key: "setStave",
    value: function setStave(stave) {
      var line = this.getLine();
      this.stave = stave;
      this.setY(stave.getYForNote(line));
      this.context = this.stave.context;
      return this;
    } // Pre-render formatting

  }, {
    key: "preFormat",
    value: function preFormat() {
      if (this.preFormatted) return this;
      var width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;
      this.setWidth(width);
      this.setPreFormatted(true);
      return this;
    } // Draw the notehead

  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();
      this.setRendered();
      var ctx = this.context;
      var 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.stem_down_x_offset;
      }

      var y = this.y;
      L("Drawing note head '", this.note_type, this.duration, "' at", head_x, y); // Begin and end positions for head.

      var stem_direction = this.stem_direction;
      var glyph_font_scale = this.render_options.glyph_font_scale;

      if (this.style) {
        this.applyStyle(ctx);
      }

      var categorySuffix = "".concat(this.glyph_code, "Stem").concat(stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].UP ? 'Up' : 'Down');

      if (this.note_type === 's') {
        var staveSpace = this.stave.getSpacingBetweenLines();
        drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);
      } else {
        _glyph__WEBPACK_IMPORTED_MODULE_5__["Glyph"].renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {
          font: this.musicFont,
          category: this.custom_glyph ? "noteHead.custom.".concat(categorySuffix) : "noteHead.standard.".concat(categorySuffix)
        });
      }

      if (this.style) {
        this.restoreStyle(ctx);
      }
    }
  }]);

  return NoteHead;
}(_note__WEBPACK_IMPORTED_MODULE_2__["Note"]);

/***/ }),

/***/ "./src/notesubgroup.js":
/*!*****************************!*\
  !*** ./src/notesubgroup.js ***!
  \*****************************/
/*! exports provided: NoteSubGroup */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NoteSubGroup", function() { return NoteSubGroup; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./formatter */ "./src/formatter.js");
/* harmony import */ var _voice__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./voice */ "./src/voice.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://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.





var NoteSubGroup =
/*#__PURE__*/
function (_Modifier) {
  _inherits(NoteSubGroup, _Modifier);

  _createClass(NoteSubGroup, null, [{
    key: "format",
    // Arrange groups inside a `ModifierContext`
    value: function format(groups, state) {
      if (!groups || groups.length === 0) return false;
      var width = 0;

      for (var i = 0; i < groups.length; ++i) {
        var group = groups[i];
        group.preFormat();
        width += group.getWidth();
      }

      state.left_shift += width;
      return true;
    }
  }, {
    key: "CATEGORY",
    get: function get() {
      return 'notesubgroup';
    }
  }]);

  function NoteSubGroup(subNotes) {
    var _this;

    _classCallCheck(this, NoteSubGroup);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(NoteSubGroup).call(this));

    _this.setAttribute('type', 'NoteSubGroup');

    _this.note = null;
    _this.index = null;
    _this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"].Position.LEFT;
    _this.subNotes = subNotes;

    _this.subNotes.forEach(function (subNote) {
      subNote.ignore_ticks = false;
    });

    _this.width = 0;
    _this.preFormatted = false;
    _this.formatter = new _formatter__WEBPACK_IMPORTED_MODULE_3__["Formatter"]();
    _this.voice = new _voice__WEBPACK_IMPORTED_MODULE_4__["Voice"]({
      num_beats: 4,
      beat_value: 4,
      resolution: _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].RESOLUTION
    }).setStrict(false);

    _this.voice.addTickables(_this.subNotes);

    return _possibleConstructorReturn(_this, _assertThisInitialized(_this));
  }

  _createClass(NoteSubGroup, [{
    key: "getCategory",
    value: function getCategory() {
      return NoteSubGroup.CATEGORY;
    }
  }, {
    key: "preFormat",
    value: function preFormat() {
      if (this.preFormatted) return;
      this.formatter.joinVoices([this.voice]).format([this.voice], 0);
      this.setWidth(this.formatter.getMinTotalWidth());
      this.preFormatted = true;
    }
  }, {
    key: "setNote",
    value: function setNote(note) {
      this.note = note;
    }
  }, {
    key: "setWidth",
    value: function setWidth(width) {
      this.width = width;
    }
  }, {
    key: "getWidth",
    value: function getWidth() {
      return this.width;
    }
  }, {
    key: "draw",
    value: function draw() {
      var _this2 = this;

      this.checkContext();
      var note = this.getNote();

      if (!(note && this.index !== null)) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('NoAttachedNote', "Can't draw notes without a parent note and parent note index.");
      }

      this.setRendered();
      this.alignSubNotesWithNote(this.subNotes, note); // Modifier function
      // Draw notes

      this.subNotes.forEach(function (subNote) {
        return subNote.setContext(_this2.context).drawWithStyle();
      });
    }
  }]);

  return NoteSubGroup;
}(_modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"]);

/***/ }),

/***/ "./src/ornament.js":
/*!*************************!*\
  !*** ./src/ornament.js ***!
  \*************************/
/*! exports provided: Ornament */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Ornament", function() { return Ornament; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
/* harmony import */ var _tickcontext__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tickcontext */ "./src/tickcontext.js");
/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author: Cyril Silverman
//
// ## Description
//
// This file implements ornaments as modifiers that can be
// attached to notes. The complete list of ornaments is available in
// `tables.js` under `Vex.Flow.ornamentCodes`.
//
// See `tests/ornament_tests.js` for usage examples.





 // To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (Ornament.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.Ornament', args);
}

var Ornament =
/*#__PURE__*/
function (_Modifier) {
  _inherits(Ornament, _Modifier);

  _createClass(Ornament, null, [{
    key: "format",
    // ## Static Methods
    // Arrange ornaments inside `ModifierContext`
    value: function format(ornaments, state) {
      if (!ornaments || ornaments.length === 0) return false;
      var width = 0;

      for (var i = 0; i < ornaments.length; ++i) {
        var ornament = ornaments[i];
        var increment = 2;
        width = Math.max(ornament.getWidth(), width);

        if (ornament.getPosition() === _modifier__WEBPACK_IMPORTED_MODULE_2__["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 += width / 2;
      state.right_shift += width / 2;
      return true;
    } // Create a new ornament of type `type`, which is an entry in
    // `Vex.Flow.ornamentCodes` in `tables.js`.

  }, {
    key: "CATEGORY",
    get: function get() {
      return 'ornaments';
    }
  }]);

  function Ornament(type) {
    var _this;

    _classCallCheck(this, Ornament);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Ornament).call(this));

    _this.setAttribute('type', 'Ornament');

    _this.note = null;
    _this.index = null;
    _this.type = type;
    _this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"].Position.ABOVE;
    _this.delayed = false;
    _this.accidentalUpper = null;
    _this.accidentalLower = null;
    _this.render_options = {
      font_scale: 38,
      accidentalLowerPadding: 3,
      accidentalUpperPadding: 3
    };
    _this.ornament = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].ornamentCodes(_this.type);

    if (!_this.ornament) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('ArgumentError', "Ornament not found: '".concat(_this.type, "'"));
    }

    _this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_5__["Glyph"](_this.ornament.code, _this.render_options.font_scale, {
      category: "ornament.".concat(_this.ornament.code)
    });

    _this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift


    return _this;
  }

  _createClass(Ornament, [{
    key: "getCategory",
    value: function getCategory() {
      return Ornament.CATEGORY;
    } // Set whether the ornament is to be delayed

  }, {
    key: "setDelayed",
    value: function setDelayed(delayed) {
      this.delayed = delayed;
      return this;
    } // Set the upper accidental for the ornament

  }, {
    key: "setUpperAccidental",
    value: function setUpperAccidental(accid) {
      var scale = this.render_options.font_scale / 1.3;
      this.accidentalUpper = new _glyph__WEBPACK_IMPORTED_MODULE_5__["Glyph"](_tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].accidentalCodes(accid).code, scale);
      this.accidentalUpper.setOrigin(0.5, 1.0);
      return this;
    } // Set the lower accidental for the ornament

  }, {
    key: "setLowerAccidental",
    value: function setLowerAccidental(accid) {
      var scale = this.render_options.font_scale / 1.3;
      this.accidentalLower = new _glyph__WEBPACK_IMPORTED_MODULE_5__["Glyph"](_tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].accidentalCodes(accid).code, scale);
      this.accidentalLower.setOrigin(0.5, 1.0);
      return this;
    } // Render ornament in position next to note.

  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();

      if (!this.note || this.index == null) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoAttachedNote', "Can't draw Ornament without a note and index.");
      }

      this.setRendered();
      var ctx = this.context;
      var stemDir = this.note.getStemDirection();
      var stave = this.note.getStave(); // Get stem extents

      var stemExtents = this.note.getStem().getExtents();
      var y = stemDir === _stavenote__WEBPACK_IMPORTED_MODULE_4__["StaveNote"].STEM_DOWN ? stemExtents.baseY : stemExtents.topY; // TabNotes don't have stems attached to them. Tab stems are rendered
      // outside the stave.

      if (this.note.getCategory() === 'tabnotes') {
        if (this.note.hasStem()) {
          if (stemDir === _stavenote__WEBPACK_IMPORTED_MODULE_4__["StaveNote"].STEM_DOWN) {
            y = stave.getYForTopText(this.text_line);
          }
        } else {
          // Without a stem
          y = stave.getYForTopText(this.text_line);
        }
      }

      var isPlacedOnNoteheadSide = stemDir === _stavenote__WEBPACK_IMPORTED_MODULE_4__["StaveNote"].STEM_DOWN;
      var spacing = stave.getSpacingBetweenLines();
      var lineSpacing = 1; // Beamed stems are longer than quarter note stems, adjust accordingly

      if (!isPlacedOnNoteheadSide && this.note.beam) {
        lineSpacing += 0.5;
      }

      var totalSpacing = spacing * (this.text_line + lineSpacing);
      var glyphYBetweenLines = y - totalSpacing; // Get initial coordinates for the modifier position

      var start = this.note.getModifierStartXY(this.position, this.index);
      var glyphX = start.x;
      var glyphY = Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);
      glyphY += this.y_shift; // Ajdust x position if ornament is delayed

      if (this.delayed) {
        var delayXShift = 0;

        if (this.delayXShift !== undefined) {
          delayXShift = this.delayXShift;
        } else {
          delayXShift += this.glyph.getMetrics().width / 2;
          var nextContext = _tickcontext__WEBPACK_IMPORTED_MODULE_3__["TickContext"].getNextContext(this.note.getTickContext());

          if (nextContext) {
            delayXShift += (nextContext.getX() - glyphX) * 0.5;
          } else {
            delayXShift += (stave.x + stave.width - glyphX) * 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;
      }

      this.glyph.render(ctx, glyphX, glyphY);
      glyphY -= this.glyph.getMetrics().height;

      if (this.accidentalUpper) {
        glyphY -= this.render_options.accidentalUpperPadding;
        this.accidentalUpper.render(ctx, glyphX, glyphY);
      }
    }
  }]);

  return Ornament;
}(_modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"]);

/***/ }),

/***/ "./src/parser.js":
/*!***********************!*\
  !*** ./src/parser.js ***!
  \***********************/
/*! exports provided: X, Parser */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "X", function() { return X; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Parser", function() { return Parser; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://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`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (Parser.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.Parser', args);
}

var X = _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].MakeException('ParserError'); // Converts parser results into an easy to reference list that can be
// used in triggers.

function flattenMatches(results) {
  if (results.matchedString !== undefined) return results.matchedString;
  if (results.results) return flattenMatches(results.results);
  if (results.length === 1) return flattenMatches(results[0]);
  if (results.length === 0) return null;
  return results.map(flattenMatches);
} // 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.)


var Parser =
/*#__PURE__*/
function () {
  // For an example of a simple grammar, take a look at tests/parser_tests.js or
  // the EasyScore grammar in easyscore.js.
  function Parser(grammar) {
    _classCallCheck(this, Parser);

    this.grammar = grammar;
  } // 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.


  _createClass(Parser, [{
    key: "parse",
    value: function parse(line) {
      this.line = line;
      this.pos = 0;
      this.errorPos = -1;
      var results = this.expect(this.grammar.begin());
      results.errorPos = this.errorPos;
      return results;
    }
  }, {
    key: "matchFail",
    value: function matchFail(returnPos) {
      if (this.errorPos === -1) this.errorPos = this.pos;
      this.pos = returnPos;
    }
  }, {
    key: "matchSuccess",
    value: function matchSuccess() {
      this.errorPos = -1;
    } // Look for `token` in this.line[this.pos], and return success
    // if one is found. `token` is specified as a regular expression.

  }, {
    key: "matchToken",
    value: function matchToken(token) {
      var noSpace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var regexp = noSpace ? new RegExp('^((' + token + '))') : new RegExp('^((' + token + ')\\s*)');
      var workingLine = this.line.slice(this.pos);
      var 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.

  }, {
    key: "expectOne",
    value: function expectOne(rule) {
      var maybe = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var results = [];
      var pos = this.pos;
      var allMatches = true;
      var oneMatch = false;
      maybe = maybe === true || rule.maybe === true; // Execute all sub rules in sequence.

      for (var i = 0; i < rule.expect.length; i++) {
        var next = rule.expect[i];
        var localPos = this.pos;
        var 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;
          }
        }
      }

      var gotOne = rule.or && oneMatch || allMatches;
      var success = gotOne || maybe === true;
      if (maybe && !gotOne) this.pos = pos;
      if (success) this.matchSuccess();else this.matchFail(pos);
      return {
        success: success,
        results: results,
        numMatches: gotOne ? 1 : 0
      };
    } // 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).

  }, {
    key: "expectOneOrMore",
    value: function expectOneOrMore(rule) {
      var maybe = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
      var results = [];
      var pos = this.pos;
      var numMatches = 0;
      var more = true;

      do {
        var result = this.expectOne(rule);

        if (result.success) {
          numMatches++;
          results.push(result.results);
        } else {
          more = false;
        }
      } while (more);

      var success = numMatches > 0 || maybe === true;
      if (maybe && !(numMatches > 0)) this.pos = pos;
      if (success) this.matchSuccess();else this.matchFail(pos);
      return {
        success: success,
        results: results,
        numMatches: numMatches
      };
    } // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.

  }, {
    key: "expectZeroOrMore",
    value: function expectZeroOrMore(rule) {
      return this.expectOneOrMore(rule, true);
    } // Execute the rule produced by the provided the `rules` function. This
    // ofloads 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`.)

  }, {
    key: "expect",
    value: function expect(rules) {
      L('Evaluating rules:', rules);
      var result;

      if (!rules) {
        throw new X('Invalid Rule: ' + rules, rules);
      } // Get rule from Grammar class.


      var rule = rules.bind(this.grammar)();

      if (rule.token) {
        // 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) {
        if (rule.oneOrMore) {
          result = this.expectOneOrMore(rule);
        } else if (rule.zeroOrMore) {
          result = this.expectZeroOrMore(rule);
        } else {
          result = this.expectOne(rule);
        }
      } else {
        throw new X('Bad grammar! No `token` or `expect` property', rule);
      } // If there's a trigger attached to this rule, then pull it.


      result.matches = [];
      if (result.results) result.results.forEach(function (r) {
        return result.matches.push(flattenMatches(r));
      });
      if (rule.run && result.success) rule.run(result);
      return result;
    }
  }]);

  return Parser;
}();

/***/ }),

/***/ "./src/pedalmarking.js":
/*!*****************************!*\
  !*** ./src/pedalmarking.js ***!
  \*****************************/
/*! exports provided: PedalMarking */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PedalMarking", function() { return PedalMarking; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
//
// This file 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.


 // To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (PedalMarking.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('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) {
  var glyph_data = PedalMarking.GLYPHS[name];
  var 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);
}

var PedalMarking =
/*#__PURE__*/
function (_Element) {
  _inherits(PedalMarking, _Element);

  _createClass(PedalMarking, null, [{
    key: "createSustain",
    // Create a sustain pedal marking. Returns the defaults PedalMarking.
    // Which uses the traditional "Ped" and "*"" markings.
    value: function createSustain(notes) {
      var pedal = new PedalMarking(notes);
      return pedal;
    } // Create a sostenuto pedal marking

  }, {
    key: "createSostenuto",
    value: function createSostenuto(notes) {
      var pedal = new PedalMarking(notes);
      pedal.setStyle(PedalMarking.Styles.MIXED);
      pedal.setCustomText('Sost. Ped.');
      return pedal;
    } // Create an una corda pedal marking

  }, {
    key: "createUnaCorda",
    value: function createUnaCorda(notes) {
      var pedal = new PedalMarking(notes);
      pedal.setStyle(PedalMarking.Styles.TEXT);
      pedal.setCustomText('una corda', 'tre corda');
      return pedal;
    } // ## Prototype Methods

  }, {
    key: "GLYPHS",
    // Glyph data
    get: function get() {
      return {
        'pedal_depress': {
          code: 'keyboardPedalPed',
          x_shift: -10,
          y_shift: 0
        },
        'pedal_release': {
          code: 'keyboardPedalUp',
          x_shift: -2,
          y_shift: 3
        }
      };
    }
  }, {
    key: "Styles",
    get: function get() {
      return {
        TEXT: 1,
        BRACKET: 2,
        MIXED: 3
      };
    }
  }, {
    key: "StylesString",
    get: function get() {
      return {
        text: PedalMarking.Styles.TEXT,
        bracket: PedalMarking.Styles.BRACKET,
        mixed: PedalMarking.Styles.MIXED
      };
    }
  }]);

  function PedalMarking(notes) {
    var _this;

    _classCallCheck(this, PedalMarking);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(PedalMarking).call(this));

    _this.setAttribute('type', 'PedalMarking');

    _this.notes = notes;
    _this.style = PedalMarking.TEXT;
    _this.line = 0; // Custom text for the release/depress markings

    _this.custom_depress_text = '';
    _this.custom_release_text = '';
    _this.font = {
      family: 'Times New Roman',
      size: 12,
      weight: 'italic bold'
    };
    _this.render_options = {
      bracket_height: 10,
      text_margin_right: 6,
      bracket_line_width: 1,
      color: 'black'
    };
    return _this;
  } // Set custom text for the `depress`/`release` pedal markings. No text is
  // set if the parameter is falsy.


  _createClass(PedalMarking, [{
    key: "setCustomText",
    value: function setCustomText(depress, release) {
      this.custom_depress_text = depress || '';
      this.custom_release_text = release || '';
      return this;
    } // Set the pedal marking style

  }, {
    key: "setStyle",
    value: function setStyle(style) {
      if (style < 1 && style > 3) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('InvalidParameter', 'The style must be one found in PedalMarking.Styles');
      }

      this.style = style;
      return this;
    } // Set the staff line to render the markings on

  }, {
    key: "setLine",
    value: function setLine(line) {
      this.line = line;
      return this;
    } // Draw the bracket based pedal markings

  }, {
    key: "drawBracketed",
    value: function drawBracketed() {
      var _this2 = this;

      var ctx = this.context;
      var is_pedal_depressed = false;
      var prev_x;
      var prev_y;
      var pedal = this; // Iterate through each note

      this.notes.forEach(function (note, index, notes) {
        // Each note triggers the opposite pedal action
        is_pedal_depressed = !is_pedal_depressed; // Get the initial coordinates for the note

        var x = note.getAbsoluteX();
        var y = note.getStave().getYForBottomText(pedal.line + 3); // Throw if current note is positioned before the previous note

        if (x < prev_x) {
          throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('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


        var next_is_same = notes[index + 1] === note;
        var prev_is_same = notes[index - 1] === note;
        var x_shift = 0;

        var point = _this2.musicFont.lookupMetric("pedalMarking.".concat(is_pedal_depressed ? 'down' : 'up', ".point"));

        if (is_pedal_depressed) {
          // Adjustment for release+depress
          x_shift = prev_is_same ? 5 : 0;

          if (pedal.style === PedalMarking.Styles.MIXED && !prev_is_same) {
            // For MIXED style, start with text instead of bracket
            if (pedal.custom_depress_text) {
              // If we have custom text, use instead of the default "Ped" glyph
              var text_width = ctx.measureText(pedal.custom_depress_text).width;
              ctx.fillText(pedal.custom_depress_text, x - text_width / 2, y);
              x_shift = text_width / 2 + pedal.render_options.text_margin_right;
            } else {
              // Render the Ped glyph in position
              drawPedalGlyph('pedal_depress', ctx, x, y, point);
              x_shift = 20 + pedal.render_options.text_margin_right;
            }
          } else {
            // Draw start bracket
            ctx.beginPath();
            ctx.moveTo(x, y - pedal.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 - pedal.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.

  }, {
    key: "drawText",
    value: function drawText() {
      var _this3 = this;

      var ctx = this.context;
      var is_pedal_depressed = false;
      var pedal = this; // Iterate through each note, placing glyphs or custom text accordingly

      this.notes.forEach(function (note) {
        is_pedal_depressed = !is_pedal_depressed;
        var stave = note.getStave();
        var x = note.getAbsoluteX();
        var y = stave.getYForBottomText(pedal.line + 3);

        var point = _this3.musicFont.lookupMetric("pedalMarking.".concat(is_pedal_depressed ? 'down' : 'up', ".point"));

        var text_width = 0;

        if (is_pedal_depressed) {
          if (pedal.custom_depress_text) {
            text_width = ctx.measureText(pedal.custom_depress_text).width;
            ctx.fillText(pedal.custom_depress_text, x - text_width / 2, y);
          } else {
            drawPedalGlyph('pedal_depress', ctx, x, y, point);
          }
        } else {
          if (pedal.custom_release_text) {
            text_width = ctx.measureText(pedal.custom_release_text).width;
            ctx.fillText(pedal.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

  }, {
    key: "draw",
    value: function draw() {
      var ctx = this.checkContext();
      this.setRendered();
      ctx.save();
      ctx.setStrokeStyle(this.render_options.color);
      ctx.setFillStyle(this.render_options.color);
      ctx.setFont(this.font.family, this.font.size, this.font.weight);
      L('Rendering Pedal Marking');

      if (this.style === PedalMarking.Styles.BRACKET || this.style === PedalMarking.Styles.MIXED) {
        ctx.setLineWidth(this.render_options.bracket_line_width);
        this.drawBracketed();
      } else if (this.style === PedalMarking.Styles.TEXT) {
        this.drawText();
      }

      ctx.restore();
    }
  }]);

  return PedalMarking;
}(_element__WEBPACK_IMPORTED_MODULE_1__["Element"]);

/***/ }),

/***/ "./src/raphaelcontext.js":
/*!*******************************!*\
  !*** ./src/raphaelcontext.js ***!
  \*******************************/
/*! exports provided: RaphaelContext */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RaphaelContext", function() { return RaphaelContext; });
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// A rendering context for the Raphael backend.
//
// ## Warning: Deprecated for SVGContext
// Except in instances where SVG support for IE < 9.0 is
// needed, SVGContext is recommended.
var RaphaelContext =
/*#__PURE__*/
function () {
  function RaphaelContext(element) {
    _classCallCheck(this, RaphaelContext);

    this.element = element;
    this.paper = Raphael(element); // eslint-disable-line

    this.path = '';
    this.pen = {
      x: 0,
      y: 0
    };
    this.lineWidth = 1.0;
    this.state = {
      scale: {
        x: 1,
        y: 1
      },
      font_family: 'Arial',
      font_size: 8,
      font_weight: 800
    };
    this.attributes = {
      'stroke-width': 0.3,
      'fill': 'black',
      'stroke': 'black',
      'font': '10pt Arial'
    };
    this.background_attributes = {
      'stroke-width': 0,
      'fill': 'white',
      'stroke': 'white',
      'font': '10pt Arial'
    };
    this.shadow_attributes = {
      width: 0,
      color: 'black'
    };
    this.state_stack = [];
  } // Containers not implemented


  _createClass(RaphaelContext, [{
    key: "openGroup",
    value: function openGroup() {}
  }, {
    key: "closeGroup",
    value: function closeGroup() {}
  }, {
    key: "add",
    value: function add() {}
  }, {
    key: "setFont",
    value: function setFont(family, size, weight) {
      this.state.font_family = family;
      this.state.font_size = size;
      this.state.font_weight = weight;
      this.attributes.font = (this.state.font_weight || '') + ' ' + this.state.font_size * this.state.scale.x + 'pt ' + this.state.font_family;
      return this;
    }
  }, {
    key: "setRawFont",
    value: function setRawFont(font) {
      this.attributes.font = font;
      return this;
    }
  }, {
    key: "setFillStyle",
    value: function setFillStyle(style) {
      this.attributes.fill = style;
      return this;
    }
  }, {
    key: "setBackgroundFillStyle",
    value: function setBackgroundFillStyle(style) {
      this.background_attributes.fill = style;
      this.background_attributes.stroke = style;
      return this;
    }
  }, {
    key: "setStrokeStyle",
    value: function setStrokeStyle(style) {
      this.attributes.stroke = style;
      return this;
    }
  }, {
    key: "setShadowColor",
    value: function setShadowColor(style) {
      this.shadow_attributes.color = style;
      return this;
    }
  }, {
    key: "setShadowBlur",
    value: function setShadowBlur(blur) {
      this.shadow_attributes.width = blur;
      return this;
    }
  }, {
    key: "setLineWidth",
    value: function setLineWidth(width) {
      this.attributes['stroke-width'] = width;
      this.lineWidth = width;
    } // Empty because there is no equivalent in SVG

  }, {
    key: "setLineDash",
    value: function setLineDash() {
      return this;
    }
  }, {
    key: "setLineCap",
    value: function setLineCap() {
      return this;
    }
  }, {
    key: "scale",
    value: function scale(x, y) {
      this.state.scale = {
        x: x,
        y: y
      }; // The scale() method is deprecated as of Raphael.JS 2.0, and
      // can no longer be used as an option in an Element.attr() call.
      // It is preserved here for users running earlier versions of
      // Raphael.JS, though it has no effect on the SVG output in
      // Raphael 2 and higher.

      this.attributes.transform = 'S' + x + ',' + y + ',0,0';
      this.attributes.scale = x + ',' + y + ',0,0';
      this.attributes.font = this.state.font_size * this.state.scale.x + 'pt ' + this.state.font_family;
      this.background_attributes.transform = 'S' + x + ',' + y + ',0,0';
      this.background_attributes.font = this.state.font_size * this.state.scale.x + 'pt ' + this.state.font_family;
      return this;
    }
  }, {
    key: "clear",
    value: function clear() {
      this.paper.clear();
    }
  }, {
    key: "resize",
    value: function resize(width, height) {
      this.element.style.width = width;
      this.paper.setSize(width, height);
      return this;
    } // Sets the SVG `viewBox` property, which results in auto scaling images when its container
    // is resized.
    //
    // Usage: `ctx.setViewBox("0 0 600 400")`

  }, {
    key: "setViewBox",
    value: function setViewBox(viewBox) {
      this.paper.canvas.setAttribute('viewBox', viewBox);
    }
  }, {
    key: "rect",
    value: function rect(x, y, width, height) {
      if (height < 0) {
        y += height;
        height = -height;
      }

      this.paper.rect(x, y, width - 0.5, height - 0.5).attr(this.attributes).attr('fill', 'none').attr('stroke-width', this.lineWidth);
      return this;
    }
  }, {
    key: "fillRect",
    value: function fillRect(x, y, width, height) {
      if (height < 0) {
        y += height;
        height = -height;
      }

      this.paper.rect(x, y, width - 0.5, height - 0.5).attr(this.attributes);
      return this;
    }
  }, {
    key: "clearRect",
    value: function clearRect(x, y, width, height) {
      if (height < 0) {
        y += height;
        height = -height;
      }

      this.paper.rect(x, y, width - 0.5, height - 0.5).attr(this.background_attributes);
      return this;
    }
  }, {
    key: "beginPath",
    value: function beginPath() {
      this.path = '';
      this.pen.x = 0;
      this.pen.y = 0;
      return this;
    }
  }, {
    key: "moveTo",
    value: function moveTo(x, y) {
      this.path += 'M' + x + ',' + y;
      this.pen.x = x;
      this.pen.y = y;
      return this;
    }
  }, {
    key: "lineTo",
    value: function lineTo(x, y) {
      this.path += 'L' + x + ',' + y;
      this.pen.x = x;
      this.pen.y = y;
      return this;
    }
  }, {
    key: "bezierCurveTo",
    value: function bezierCurveTo(x1, y1, x2, y2, x, y) {
      this.path += 'C' + x1 + ',' + y1 + ',' + x2 + ',' + y2 + ',' + x + ',' + y;
      this.pen.x = x;
      this.pen.y = y;
      return this;
    }
  }, {
    key: "quadraticCurveTo",
    value: function quadraticCurveTo(x1, y1, x, y) {
      this.path += 'Q' + x1 + ',' + y1 + ',' + x + ',' + y;
      this.pen.x = x;
      this.pen.y = y;
      return this;
    } // This is an attempt (hack) to simulate the HTML5 canvas
    // arc method.

  }, {
    key: "arc",
    value: function arc(x, y, radius, startAngle, endAngle, antiClockwise) {
      function normalizeAngle(angle) {
        while (angle < 0) {
          angle += Math.PI * 2;
        }

        while (angle > Math.PI * 2) {
          angle -= Math.PI * 2;
        }

        return angle;
      }

      startAngle = normalizeAngle(startAngle);
      endAngle = normalizeAngle(endAngle);

      if (startAngle > endAngle) {
        var tmp = startAngle;
        startAngle = endAngle;
        endAngle = tmp;
        antiClockwise = !antiClockwise;
      }

      var delta = endAngle - startAngle;

      if (delta > Math.PI) {
        this.arcHelper(x, y, radius, startAngle, startAngle + delta / 2, antiClockwise);
        this.arcHelper(x, y, radius, startAngle + delta / 2, endAngle, antiClockwise);
      } else {
        this.arcHelper(x, y, radius, startAngle, endAngle, antiClockwise);
      }

      return this;
    }
  }, {
    key: "arcHelper",
    value: function arcHelper(x, y, radius, startAngle, endAngle, antiClockwise) {
      var x1 = x + radius * Math.cos(startAngle);
      var y1 = y + radius * Math.sin(startAngle);
      var x2 = x + radius * Math.cos(endAngle);
      var y2 = y + radius * Math.sin(endAngle);
      var largeArcFlag = 0;
      var sweepFlag = 0;

      if (antiClockwise) {
        sweepFlag = 1;

        if (endAngle - startAngle < Math.PI) {
          largeArcFlag = 1;
        }
      } else if (endAngle - startAngle > Math.PI) {
        largeArcFlag = 1;
      }

      this.path += 'M' + x1 + ',' + y1 + ',A' + radius + ',' + radius + ',0,' + largeArcFlag + ',' + sweepFlag + ',' + x2 + ',' + y2 + 'M' + this.pen.x + ',' + this.pen.y;
    } // Adapted from the source for Raphael's Element.glow

  }, {
    key: "glow",
    value: function glow() {
      var out = this.paper.set();

      if (this.shadow_attributes.width > 0) {
        var sa = this.shadow_attributes;
        var num_paths = sa.width / 2;

        for (var i = 1; i <= num_paths; i++) {
          out.push(this.paper.path(this.path).attr({
            stroke: sa.color,
            'stroke-linejoin': 'round',
            'stroke-linecap': 'round',
            'stroke-width': +(sa.width / num_paths * i).toFixed(3),
            opacity: +((sa.opacity || 0.3) / num_paths).toFixed(3),
            // See note in this.scale(): In Raphael the scale() method
            // is deprecated and removed as of Raphael 2.0 and replaced
            // by the transform() method.  It is preserved here for
            // users with earlier versions of Raphael, but has no effect
            // on the output SVG in Raphael 2.0+.
            transform: this.attributes.transform,
            scale: this.attributes.scale
          }));
        }
      }

      return out;
    }
  }, {
    key: "fill",
    value: function fill() {
      var elem = this.paper.path(this.path).attr(this.attributes).attr('stroke-width', 0);
      this.glow(elem);
      return this;
    }
  }, {
    key: "stroke",
    value: function stroke() {
      // The first line of code below is, unfortunately, a bit of a hack:
      // Raphael's transform() scaling does not scale the stroke-width, so
      // in order to scale a stroke, we have to manually scale the
      // stroke-width.
      //
      // This works well so long as the X & Y states for this.scale() are
      // relatively similar.  However, if they are very different, we
      // would expect horizontal and vertical lines to have different
      // stroke-widths.
      //
      // In the future, if we want to support very divergent values for
      // horizontal and vertical scaling, we may want to consider
      // implementing SVG scaling with properties of the SVG viewBox &
      // viewPort and removing it entirely from the Element.attr() calls.
      // This would more closely parallel the approach taken in
      // canvascontext.js as well.
      var strokeWidth = this.lineWidth * (this.state.scale.x + this.state.scale.y) / 2;
      var elem = this.paper.path(this.path).attr(this.attributes).attr('fill', 'none').attr('stroke-width', strokeWidth);
      this.glow(elem);
      return this;
    }
  }, {
    key: "closePath",
    value: function closePath() {
      this.path += 'Z';
      return this;
    }
  }, {
    key: "measureText",
    value: function measureText(text) {
      var txt = this.paper.text(0, 0, text).attr(this.attributes).attr('fill', 'none').attr('stroke', 'none');
      var bounds = txt.getBBox();
      txt.remove();
      return {
        width: bounds.width,
        height: bounds.height
      };
    }
  }, {
    key: "fillText",
    value: function fillText(text, x, y) {
      this.paper.text(x + this.measureText(text).width / 2, y - this.state.font_size / (2.25 * this.state.scale.y), text).attr(this.attributes);
      return this;
    }
  }, {
    key: "save",
    value: function save() {
      // TODO(mmuthanna): State needs to be deep-copied.
      this.state_stack.push({
        state: {
          font_family: this.state.font_family
        },
        attributes: {
          font: this.attributes.font,
          fill: this.attributes.fill,
          stroke: this.attributes.stroke,
          'stroke-width': this.attributes['stroke-width']
        },
        shadow_attributes: {
          width: this.shadow_attributes.width,
          color: this.shadow_attributes.color
        }
      });
      return this;
    }
  }, {
    key: "restore",
    value: function restore() {
      // TODO(0xfe): State needs to be deep-restored.
      var state = this.state_stack.pop();
      this.state.font_family = state.state.font_family;
      this.attributes.font = state.attributes.font;
      this.attributes.fill = state.attributes.fill;
      this.attributes.stroke = state.attributes.stroke;
      this.attributes['stroke-width'] = state.attributes['stroke-width'];
      this.shadow_attributes.width = state.shadow_attributes.width;
      this.shadow_attributes.color = state.shadow_attributes.color;
      return this;
    }
  }]);

  return RaphaelContext;
}();

/***/ }),

/***/ "./src/registry.js":
/*!*************************!*\
  !*** ./src/registry.js ***!
  \*************************/
/*! exports provided: X, Registry */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "X", function() { return X; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Registry", function() { return Registry; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://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 regiser with a registry:
//
// 1) Explicitly call `element.register(registry)`, 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.

var X = _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].MakeException('RegistryError');

function setIndexValue(index, name, value, id, elem) {
  if (!index[name][value]) index[name][value] = {};
  index[name][value][id] = elem;
}

var Registry =
/*#__PURE__*/
function () {
  _createClass(Registry, null, [{
    key: "INDEXES",
    get: function get() {
      return ['type'];
    }
  }]);

  function Registry() {
    _classCallCheck(this, Registry);

    this.clear();
  } // If you call `enableDefaultRegistry`, any new elements will auto-register with
  // the provided registry as soon as they're constructed.


  _createClass(Registry, [{
    key: "clear",
    value: function clear() {
      // 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.
      this.index = {
        id: {},
        type: {},
        "class": {}
      };
      return this;
    } // Updates the indexes for element 'id'. If an element's attribute changes
    // from A -> B, make sure to remove the element from A.

  }, {
    key: "updateIndex",
    value: function updateIndex(_ref) {
      var id = _ref.id,
          name = _ref.name,
          value = _ref.value,
          oldValue = _ref.oldValue;
      var elem = this.getElementById(id);

      if (oldValue !== null && this.index[name][oldValue]) {
        delete this.index[name][oldValue][id];
      }

      if (value !== null) {
        setIndexValue(this.index, 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.

  }, {
    key: "register",
    value: function register(elem, id) {
      var _this = this;

      id = id || elem.getAttribute('id');

      if (!id) {
        throw new X('Can\'t add element without `id` attribute to registry', elem);
      } // Manually add id to index, then update other indexes.


      elem.setAttribute('id', id);
      setIndexValue(this.index, 'id', id, id, elem);
      Registry.INDEXES.forEach(function (name) {
        _this.updateIndex({
          id: id,
          name: name,
          value: elem.getAttribute(name),
          oldValue: null
        });
      });
      elem.onRegister(this);
      return this;
    }
  }, {
    key: "getElementById",
    value: function getElementById(id) {
      return this.index.id[id] ? this.index.id[id][id] : null;
    }
  }, {
    key: "getElementsByAttribute",
    value: function getElementsByAttribute(attrName, value) {
      var index = this.index[attrName];

      if (index && index[value]) {
        return Object.keys(index[value]).map(function (i) {
          return index[value][i];
        });
      } else {
        return [];
      }
    }
  }, {
    key: "getElementsByType",
    value: function getElementsByType(type) {
      return this.getElementsByAttribute('type', type);
    }
  }, {
    key: "getElementsByClass",
    value: function 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.

  }, {
    key: "onUpdate",
    value: function onUpdate(_ref2) {
      var id = _ref2.id,
          name = _ref2.name,
          value = _ref2.value,
          oldValue = _ref2.oldValue;

      function includes(array, value) {
        return array.filter(function (x) {
          return x === value;
        }).length > 0;
      }

      if (!includes(Registry.INDEXES.concat(['id', 'class']), name)) return this;
      this.updateIndex({
        id: id,
        name: name,
        value: value,
        oldValue: oldValue
      });
      return this;
    }
  }], [{
    key: "enableDefaultRegistry",
    value: function enableDefaultRegistry(registry) {
      Registry.defaultRegistry = registry;
    }
  }, {
    key: "getDefaultRegistry",
    value: function getDefaultRegistry() {
      return Registry.defaultRegistry;
    }
  }, {
    key: "disableDefaultRegistry",
    value: function disableDefaultRegistry() {
      Registry.defaultRegistry = null;
    }
  }]);

  return Registry;
}();
Registry.defaultRegistry = null;

/***/ }),

/***/ "./src/renderer.js":
/*!*************************!*\
  !*** ./src/renderer.js ***!
  \*************************/
/*! exports provided: Renderer */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Renderer", function() { return Renderer; });
/* harmony import */ var _canvascontext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./canvascontext */ "./src/canvascontext.js");
/* harmony import */ var _raphaelcontext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./raphaelcontext */ "./src/raphaelcontext.js");
/* harmony import */ var _svgcontext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./svgcontext */ "./src/svgcontext.js");
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }

function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }

function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }

function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// Support for different rendering contexts: Canvas, Raphael




var lastContext = null;
var Renderer =
/*#__PURE__*/
function () {
  _createClass(Renderer, null, [{
    key: "buildContext",
    value: function buildContext(elementId, backend, width, height, background) {
      var renderer = new Renderer(elementId, backend);

      if (width && height) {
        renderer.resize(width, height);
      }

      if (!background) background = '#FFF';
      var ctx = renderer.getContext();
      ctx.setBackgroundFillStyle(background);
      Renderer.lastContext = ctx;
      return ctx;
    }
  }, {
    key: "getCanvasContext",
    value: function getCanvasContext(elementId, width, height, background) {
      return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);
    }
  }, {
    key: "getRaphaelContext",
    value: function getRaphaelContext(elementId, width, height, background) {
      return Renderer.buildContext(elementId, Renderer.Backends.RAPHAEL, width, height, background);
    }
  }, {
    key: "getSVGContext",
    value: function getSVGContext(elementId, width, height, background) {
      return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);
    }
  }, {
    key: "bolsterCanvasContext",
    value: function bolsterCanvasContext(ctx) {
      if (Renderer.USE_CANVAS_PROXY) {
        return new _canvascontext__WEBPACK_IMPORTED_MODULE_0__["CanvasContext"](ctx);
      }

      var methodNames = ['clear', 'setFont', 'setRawFont', 'setFillStyle', 'setBackgroundFillStyle', 'setStrokeStyle', 'setShadowColor', 'setShadowBlur', 'setLineWidth', 'setLineCap', 'setLineDash', 'openGroup', 'closeGroup', 'getGroup'];
      ctx.vexFlowCanvasContext = ctx;
      methodNames.forEach(function (methodName) {
        ctx[methodName] = ctx[methodName] || _canvascontext__WEBPACK_IMPORTED_MODULE_0__["CanvasContext"].prototype[methodName];
      });
      return ctx;
    } // 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.

  }, {
    key: "drawDashedLine",
    value: function drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {
      context.beginPath();
      var dx = toX - fromX;
      var dy = toY - fromY;
      var angle = Math.atan2(dy, dx);
      var x = fromX;
      var y = fromY;
      context.moveTo(fromX, fromY);
      var idx = 0;
      var draw = true;

      while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {
        var dashLength = dashPattern[idx++ % dashPattern.length];
        var nx = x + Math.cos(angle) * dashLength;
        x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);
        var 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();
    }
  }, {
    key: "Backends",
    get: function get() {
      return {
        CANVAS: 1,
        RAPHAEL: 2,
        SVG: 3,
        VML: 4
      };
    } // End of line types

  }, {
    key: "LineEndType",
    get: function get() {
      return {
        NONE: 1,
        // No leg
        UP: 2,
        // Upward leg
        DOWN: 3 // Downward leg

      };
    } // Set this to true if you're using VexFlow inside a runtime
    // that does not allow modifiying canvas objects. There is a small
    // performance degradation due to the extra indirection.

  }, {
    key: "USE_CANVAS_PROXY",
    get: function get() {
      return false;
    }
  }, {
    key: "lastContext",
    get: function get() {
      return lastContext;
    },
    set: function set(ctx) {
      lastContext = ctx;
    }
  }]);

  function Renderer(elementId, backend) {
    _classCallCheck(this, Renderer);

    this.elementId = elementId;

    if (!this.elementId) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_3__["Vex"].RERR('BadArgument', 'Invalid id for renderer.');
    }

    this.element = document.getElementById(elementId);
    if (!this.element) this.element = elementId; // Verify backend and create context

    this.ctx = null;
    this.paper = null;
    this.backend = backend;

    if (this.backend === Renderer.Backends.CANVAS) {
      // Create context.
      if (!this.element.getContext) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_3__["Vex"].RERR('BadElement', "Can't get canvas context from element: ".concat(elementId));
      }

      this.ctx = Renderer.bolsterCanvasContext(this.element.getContext('2d'));
    } else if (this.backend === Renderer.Backends.RAPHAEL) {
      this.ctx = new _raphaelcontext__WEBPACK_IMPORTED_MODULE_1__["RaphaelContext"](this.element);
    } else if (this.backend === Renderer.Backends.SVG) {
      this.ctx = new _svgcontext__WEBPACK_IMPORTED_MODULE_2__["SVGContext"](this.element);
    } else {
      throw new _vex__WEBPACK_IMPORTED_MODULE_3__["Vex"].RERR('InvalidBackend', "No support for backend: ".concat(this.backend));
    }
  }

  _createClass(Renderer, [{
    key: "resize",
    value: function resize(width, height) {
      if (this.backend === Renderer.Backends.CANVAS) {
        if (!this.element.getContext) {
          throw new _vex__WEBPACK_IMPORTED_MODULE_3__["Vex"].RERR('BadElement', "Can't get canvas context from element: ".concat(this.elementId));
        }

        var _CanvasContext$Saniti = _canvascontext__WEBPACK_IMPORTED_MODULE_0__["CanvasContext"].SanitizeCanvasDims(width, height);

        var _CanvasContext$Saniti2 = _slicedToArray(_CanvasContext$Saniti, 2);

        width = _CanvasContext$Saniti2[0];
        height = _CanvasContext$Saniti2[1];
        var devicePixelRatio = window.devicePixelRatio || 1;
        this.element.width = width * devicePixelRatio;
        this.element.height = height * devicePixelRatio;
        this.element.style.width = width + 'px';
        this.element.style.height = height + 'px';
        this.ctx = Renderer.bolsterCanvasContext(this.element.getContext('2d'));
        this.ctx.scale(devicePixelRatio, devicePixelRatio);
      } else {
        this.ctx.resize(width, height);
      }

      return this;
    }
  }, {
    key: "getContext",
    value: function getContext() {
      return this.ctx;
    }
  }]);

  return Renderer;
}();

/***/ }),

/***/ "./src/repeatnote.js":
/*!***************************!*\
  !*** ./src/repeatnote.js ***!
  \***************************/
/*! exports provided: RepeatNote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RepeatNote", function() { return RepeatNote; });
/* harmony import */ var _glyphnote__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./glyphnote */ "./src/glyphnote.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.


var RepeatNote =
/*#__PURE__*/
function (_GlyphNote) {
  _inherits(RepeatNote, _GlyphNote);

  function RepeatNote(type, noteStruct, options) {
    var _this;

    _classCallCheck(this, RepeatNote);

    // Smufl Codes
    var CODES = {
      '1': 'repeat1Bar',
      '2': 'repeat2Bars',
      '4': 'repeat4Bars',
      'slash': 'repeatBarSlash'
    };
    noteStruct = _objectSpread({
      duration: 'q',
      align_center: type !== 'slash'
    }, noteStruct);
    _this = _possibleConstructorReturn(this, _getPrototypeOf(RepeatNote).call(this, null, _objectSpread({
      duration: 'q',
      align_center: type !== 'slash'
    }, noteStruct), options));

    _this.setAttribute('type', 'RepeatNote');

    var glyphCode = CODES[type] || 'repeat1Bar';
    var glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__["Glyph"](glyphCode, _this.musicFont.lookupMetric('repeatNote.point', 40), {
      category: 'repeatNote'
    });

    _this.setGlyph(glyph);

    return _this;
  }

  return RepeatNote;
}(_glyphnote__WEBPACK_IMPORTED_MODULE_0__["GlyphNote"]);

/***/ }),

/***/ "./src/smufl.js":
/*!**********************!*\
  !*** ./src/smufl.js ***!
  \**********************/
/*! exports provided: Fonts, DefaultFontStack, Font */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Fonts", function() { return Fonts; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DefaultFontStack", function() { return DefaultFontStack; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Font", function() { return Font; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _fonts_bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fonts/bravura_glyphs */ "./src/fonts/bravura_glyphs.js");
/* harmony import */ var _fonts_bravura_metrics__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fonts/bravura_metrics */ "./src/fonts/bravura_metrics.js");
/* harmony import */ var _fonts_gonville_glyphs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fonts/gonville_glyphs */ "./src/fonts/gonville_glyphs.js");
/* harmony import */ var _fonts_gonville_metrics__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fonts/gonville_metrics */ "./src/fonts/gonville_metrics.js");
/* harmony import */ var _fonts_petaluma_glyphs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./fonts/petaluma_glyphs */ "./src/fonts/petaluma_glyphs.js");
/* harmony import */ var _fonts_petaluma_metrics__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./fonts/petaluma_metrics */ "./src/fonts/petaluma_metrics.js");
/* harmony import */ var _fonts_custom_glyphs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./fonts/custom_glyphs */ "./src/fonts/custom_glyphs.js");
/* harmony import */ var _fonts_custom_metrics__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./fonts/custom_metrics */ "./src/fonts/custom_metrics.js");
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }











var Font =
/*#__PURE__*/
function () {
  function Font(name, metrics, fontData) {
    _classCallCheck(this, Font);

    this.name = name;
    this.metrics = metrics;
    this.fontData = fontData;
    this.codePoints = {};
  }

  _createClass(Font, [{
    key: "getName",
    value: function getName() {
      return this.name;
    }
  }, {
    key: "getResolution",
    value: function getResolution() {
      return this.fontData.resolution;
    }
  }, {
    key: "getMetrics",
    value: function getMetrics() {
      return this.metrics;
    }
  }, {
    key: "lookupMetric",
    value: function lookupMetric(key) {
      var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
      var parts = key.split('.');
      var val = this.metrics; // console.log('lookupMetric:', key);

      for (var i = 0; i < parts.length; i++) {
        if (val[parts[i]] === undefined) {
          if (defaultValue !== undefined) {
            return defaultValue;
          } else {
            throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('INVALID_KEY', "Invalid music font metric key: ".concat(key));
          }
        }

        val = val[parts[i]];
      } // console.log('found:', key, val);


      return val;
    }
  }, {
    key: "getFontData",
    value: function getFontData() {
      return this.fontData;
    }
  }, {
    key: "getGlyphs",
    value: function getGlyphs() {
      return this.fontData.glyphs;
    }
  }, {
    key: "getCodePoints",
    value: function getCodePoints() {
      return this.codePoints;
    }
  }, {
    key: "setCodePoints",
    value: function setCodePoints(codePoints) {
      this.codePoints = codePoints;
      return this;
    }
  }]);

  return Font;
}();

var Fonts = {
  Bravura: new Font('Bravura', _fonts_bravura_metrics__WEBPACK_IMPORTED_MODULE_2__["BravuraMetrics"], _fonts_bravura_glyphs__WEBPACK_IMPORTED_MODULE_1__["BravuraFont"]),
  Gonville: new Font('Gonville', _fonts_gonville_metrics__WEBPACK_IMPORTED_MODULE_4__["GonvilleMetrics"], _fonts_gonville_glyphs__WEBPACK_IMPORTED_MODULE_3__["GonvilleFont"]),
  Petaluma: new Font('Petaluma', _fonts_petaluma_metrics__WEBPACK_IMPORTED_MODULE_6__["PetalumaMetrics"], _fonts_petaluma_glyphs__WEBPACK_IMPORTED_MODULE_5__["PetalumaFont"]),
  Custom: new Font('Custom', _fonts_custom_metrics__WEBPACK_IMPORTED_MODULE_8__["CustomMetrics"], _fonts_custom_glyphs__WEBPACK_IMPORTED_MODULE_7__["CustomFont"])
};
var DefaultFontStack = [Fonts.Bravura, Fonts.Gonville, Fonts.Custom];


/***/ }),

/***/ "./src/stave.js":
/*!**********************!*\
  !*** ./src/stave.js ***!
  \**********************/
/*! exports provided: Stave */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Stave", function() { return Stave; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _stavebarline__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavebarline */ "./src/stavebarline.js");
/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.js");
/* harmony import */ var _staverepetition__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./staverepetition */ "./src/staverepetition.js");
/* harmony import */ var _stavesection__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stavesection */ "./src/stavesection.js");
/* harmony import */ var _stavetempo__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./stavetempo */ "./src/stavetempo.js");
/* harmony import */ var _stavetext__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stavetext */ "./src/stavetext.js");
/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.js");
/* harmony import */ var _clef__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./clef */ "./src/clef.js");
/* harmony import */ var _keysignature__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./keysignature */ "./src/keysignature.js");
/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.js");
/* harmony import */ var _stavevolta__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./stavevolta */ "./src/stavevolta.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.














var Stave =
/*#__PURE__*/
function (_Element) {
  _inherits(Stave, _Element);

  function Stave(x, y, width, options) {
    var _this;

    _classCallCheck(this, Stave);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Stave).call(this));

    _this.setAttribute('type', 'Stave');

    _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.font = {
      family: 'sans-serif',
      size: 8,
      weight: ''
    };
    _this.options = {
      vertical_bar_width: 10,
      // Width around vertical bar end-marker
      glyph_spacing_px: 10,
      num_lines: 5,
      fill_style: '#999999',
      left_bar: true,
      // draw vertical bar on left
      right_bar: true,
      // draw vertical bar on right
      spacing_between_lines_px: 10,
      // in pixels
      space_above_staff_ln: 4,
      // in staff lines
      space_below_staff_ln: 4,
      // in staff lines
      top_text_position: 1 // in staff lines

    };
    _this.bounds = {
      x: _this.x,
      y: _this.y,
      w: _this.width,
      h: 0
    };
    _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(_this.options, options);

    _this.resetLines();

    var BARTYPE = _stavebarline__WEBPACK_IMPORTED_MODULE_3__["Barline"].type; // beg bar

    _this.addModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_3__["Barline"](_this.options.left_bar ? BARTYPE.SINGLE : BARTYPE.NONE)); // end bar


    _this.addEndModifier(new _stavebarline__WEBPACK_IMPORTED_MODULE_3__["Barline"](_this.options.right_bar ? BARTYPE.SINGLE : BARTYPE.NONE));

    return _this;
  }

  _createClass(Stave, [{
    key: "space",
    value: function space(spacing) {
      return this.options.spacing_between_lines_px * spacing;
    }
  }, {
    key: "resetLines",
    value: function resetLines() {
      this.options.line_config = [];

      for (var 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;
    }
  }, {
    key: "getOptions",
    value: function getOptions() {
      return this.options;
    }
  }, {
    key: "setNoteStartX",
    value: function setNoteStartX(x) {
      if (!this.formatted) this.format();
      this.start_x = x;
      var begBarline = this.modifiers[0];
      begBarline.setX(this.start_x - begBarline.getWidth());
      return this;
    }
  }, {
    key: "getNoteStartX",
    value: function getNoteStartX() {
      if (!this.formatted) this.format();
      return this.start_x;
    }
  }, {
    key: "getNoteEndX",
    value: function getNoteEndX() {
      if (!this.formatted) this.format();
      return this.end_x;
    }
  }, {
    key: "getTieStartX",
    value: function getTieStartX() {
      return this.start_x;
    }
  }, {
    key: "getTieEndX",
    value: function getTieEndX() {
      return this.x + this.width;
    }
  }, {
    key: "getX",
    value: function getX() {
      return this.x;
    }
  }, {
    key: "getNumLines",
    value: function getNumLines() {
      return this.options.num_lines;
    }
  }, {
    key: "setNumLines",
    value: function setNumLines(lines) {
      this.options.num_lines = parseInt(lines, 10);
      this.resetLines();
      return this;
    }
  }, {
    key: "setY",
    value: function setY(y) {
      this.y = y;
      return this;
    }
  }, {
    key: "getTopLineTopY",
    value: function getTopLineTopY() {
      return this.getYForLine(0) - _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].STAVE_LINE_THICKNESS / 2;
    }
  }, {
    key: "getBottomLineBottomY",
    value: function getBottomLineBottomY() {
      return this.getYForLine(this.getNumLines() - 1) + _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].STAVE_LINE_THICKNESS / 2;
    }
  }, {
    key: "setX",
    value: function setX(x) {
      var shift = x - this.x;
      this.formatted = false;
      this.x = x;
      this.start_x += shift;
      this.end_x += shift;

      for (var i = 0; i < this.modifiers.length; i++) {
        var mod = this.modifiers[i];

        if (mod.x !== undefined) {
          mod.x += shift;
        }
      }

      return this;
    }
  }, {
    key: "setWidth",
    value: function 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;
    }
  }, {
    key: "getWidth",
    value: function getWidth() {
      return this.width;
    }
  }, {
    key: "getStyle",
    value: function getStyle() {
      return _objectSpread({
        fillStyle: this.options.fill_style,
        strokeStyle: this.options.fill_style,
        // yes, this is correct for legacy compatibility
        lineWidth: _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].STAVE_LINE_THICKNESS
      }, this.style || {});
    }
  }, {
    key: "setMeasure",
    value: function setMeasure(measure) {
      this.measure = measure;
      return this;
    }
    /**
     * 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
     */

  }, {
    key: "getModifierXShift",
    value: function getModifierXShift() {
      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;

      if (typeof index !== 'number') {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('InvalidIndex', 'Must be of number type');
      }

      if (!this.formatted) this.format();

      if (this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.BEGIN).length === 1) {
        return 0;
      }

      var start_x = this.start_x - this.x;
      var begBarline = this.modifiers[0];

      if (begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_3__["Barline"].type.REPEAT_BEGIN && start_x > begBarline.getWidth()) {
        start_x -= begBarline.getWidth();
      }

      return start_x;
    } // Coda & Segno Symbol functions

  }, {
    key: "setRepetitionTypeLeft",
    value: function setRepetitionTypeLeft(type, y) {
      this.modifiers.push(new _staverepetition__WEBPACK_IMPORTED_MODULE_5__["Repetition"](type, this.x, y));
      return this;
    }
  }, {
    key: "setRepetitionTypeRight",
    value: function setRepetitionTypeRight(type, y) {
      this.modifiers.push(new _staverepetition__WEBPACK_IMPORTED_MODULE_5__["Repetition"](type, this.x, y));
      return this;
    } // Volta functions

  }, {
    key: "setVoltaType",
    value: function setVoltaType(type, number_t, y) {
      this.modifiers.push(new _stavevolta__WEBPACK_IMPORTED_MODULE_13__["Volta"](type, number_t, this.x, y));
      return this;
    } // Section functions

  }, {
    key: "setSection",
    value: function setSection(section, y) {
      this.modifiers.push(new _stavesection__WEBPACK_IMPORTED_MODULE_6__["StaveSection"](section, this.x, y));
      return this;
    } // Tempo functions

  }, {
    key: "setTempo",
    value: function setTempo(tempo, y) {
      this.modifiers.push(new _stavetempo__WEBPACK_IMPORTED_MODULE_7__["StaveTempo"](tempo, this.x, y));
      return this;
    } // Text functions

  }, {
    key: "setText",
    value: function setText(text, position, options) {
      this.modifiers.push(new _stavetext__WEBPACK_IMPORTED_MODULE_8__["StaveText"](text, position, options));
      return this;
    }
  }, {
    key: "getHeight",
    value: function getHeight() {
      return this.height;
    }
  }, {
    key: "getSpacingBetweenLines",
    value: function getSpacingBetweenLines() {
      return this.options.spacing_between_lines_px;
    }
  }, {
    key: "getBoundingBox",
    value: function getBoundingBox() {
      return new _boundingbox__WEBPACK_IMPORTED_MODULE_9__["BoundingBox"](this.x, this.y, this.width, this.getBottomY() - this.y);
    }
  }, {
    key: "getBottomY",
    value: function getBottomY() {
      var options = this.options;
      var spacing = options.spacing_between_lines_px;
      var score_bottom = this.getYForLine(options.num_lines) + options.space_below_staff_ln * spacing;
      return score_bottom;
    }
  }, {
    key: "getBottomLineY",
    value: function getBottomLineY() {
      return this.getYForLine(this.options.num_lines);
    } // This returns the y for the *center* of a staff line

  }, {
    key: "getYForLine",
    value: function getYForLine(line) {
      var options = this.options;
      var spacing = options.spacing_between_lines_px;
      var headroom = options.space_above_staff_ln;
      var y = this.y + line * spacing + headroom * spacing;
      return y;
    }
  }, {
    key: "getLineForY",
    value: function getLineForY(y) {
      // Does the reverse of getYForLine - somewhat dumb and just calls
      // getYForLine until the right value is reaches
      var options = this.options;
      var spacing = options.spacing_between_lines_px;
      var headroom = options.space_above_staff_ln;
      return (y - this.y) / spacing - headroom;
    }
  }, {
    key: "getYForTopText",
    value: function getYForTopText(line) {
      var l = line || 0;
      return this.getYForLine(-l - this.options.top_text_position);
    }
  }, {
    key: "getYForBottomText",
    value: function getYForBottomText(line) {
      var l = line || 0;
      return this.getYForLine(this.options.bottom_text_position + l);
    }
  }, {
    key: "getYForNote",
    value: function getYForNote(line) {
      var options = this.options;
      var spacing = options.spacing_between_lines_px;
      var headroom = options.space_above_staff_ln;
      var y = this.y + headroom * spacing + 5 * spacing - line * spacing;
      return y;
    }
  }, {
    key: "getYForGlyphs",
    value: function 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.

  }, {
    key: "addModifier",
    value: function addModifier(modifier, position) {
      if (position !== undefined) {
        modifier.setPosition(position);
      }

      modifier.setStave(this);
      this.formatted = false;
      this.modifiers.push(modifier);
      return this;
    }
  }, {
    key: "addEndModifier",
    value: function addEndModifier(modifier) {
      this.addModifier(modifier, _stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.END);
      return this;
    } // Bar Line functions

  }, {
    key: "setBegBarType",
    value: function setBegBarType(type) {
      // Only valid bar types at beginning of stave is none, single or begin repeat
      var _Barline$type = _stavebarline__WEBPACK_IMPORTED_MODULE_3__["Barline"].type,
          SINGLE = _Barline$type.SINGLE,
          REPEAT_BEGIN = _Barline$type.REPEAT_BEGIN,
          NONE = _Barline$type.NONE;

      if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {
        this.modifiers[0].setType(type);
        this.formatted = false;
      }

      return this;
    }
  }, {
    key: "setEndBarType",
    value: function setEndBarType(type) {
      // Repeat end not valid at end of stave
      if (type !== _stavebarline__WEBPACK_IMPORTED_MODULE_3__["Barline"].type.REPEAT_BEGIN) {
        this.modifiers[1].setType(type);
        this.formatted = false;
      }

      return this;
    }
  }, {
    key: "setClef",
    value: function setClef(clefSpec, size, annotation, position) {
      if (position === undefined) {
        position = _stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.BEGIN;
      }

      if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.END) {
        this.endClef = clefSpec;
      } else {
        this.clef = clefSpec;
      }

      var clefs = this.getModifiers(position, _clef__WEBPACK_IMPORTED_MODULE_10__["Clef"].CATEGORY);

      if (clefs.length === 0) {
        this.addClef(clefSpec, size, annotation, position);
      } else {
        clefs[0].setType(clefSpec, size, annotation);
      }

      return this;
    }
  }, {
    key: "setEndClef",
    value: function setEndClef(clefSpec, size, annotation) {
      this.setClef(clefSpec, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.END);
      return this;
    }
  }, {
    key: "setKeySignature",
    value: function setKeySignature(keySpec, cancelKeySpec, position) {
      if (position === undefined) {
        position = _stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.BEGIN;
      }

      var keySignatures = this.getModifiers(position, _keysignature__WEBPACK_IMPORTED_MODULE_11__["KeySignature"].CATEGORY);

      if (keySignatures.length === 0) {
        this.addKeySignature(keySpec, cancelKeySpec, position);
      } else {
        keySignatures[0].setKeySig(keySpec, cancelKeySpec);
      }

      return this;
    }
  }, {
    key: "setEndKeySignature",
    value: function setEndKeySignature(keySpec, cancelKeySpec) {
      this.setKeySignature(keySpec, cancelKeySpec, _stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.END);
      return this;
    }
  }, {
    key: "setTimeSignature",
    value: function setTimeSignature(timeSpec, customPadding, position) {
      if (position === undefined) {
        position = _stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.BEGIN;
      }

      var timeSignatures = this.getModifiers(position, _timesignature__WEBPACK_IMPORTED_MODULE_12__["TimeSignature"].CATEGORY);

      if (timeSignatures.length === 0) {
        this.addTimeSignature(timeSpec, customPadding, position);
      } else {
        timeSignatures[0].setTimeSig(timeSpec);
      }

      return this;
    }
  }, {
    key: "setEndTimeSignature",
    value: function setEndTimeSignature(timeSpec, customPadding) {
      this.setTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.END);
      return this;
    }
  }, {
    key: "addKeySignature",
    value: function addKeySignature(keySpec, cancelKeySpec, position) {
      if (position === undefined) {
        position = _stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.BEGIN;
      }

      this.addModifier(new _keysignature__WEBPACK_IMPORTED_MODULE_11__["KeySignature"](keySpec, cancelKeySpec).setPosition(position), position);
      return this;
    }
  }, {
    key: "addClef",
    value: function addClef(clef, size, annotation, position) {
      if (position === undefined || position === _stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.BEGIN) {
        this.clef = clef;
      } else if (position === _stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.END) {
        this.endClef = clef;
      }

      this.addModifier(new _clef__WEBPACK_IMPORTED_MODULE_10__["Clef"](clef, size, annotation), position);
      return this;
    }
  }, {
    key: "addEndClef",
    value: function addEndClef(clef, size, annotation) {
      this.addClef(clef, size, annotation, _stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.END);
      return this;
    }
  }, {
    key: "addTimeSignature",
    value: function addTimeSignature(timeSpec, customPadding, position) {
      this.addModifier(new _timesignature__WEBPACK_IMPORTED_MODULE_12__["TimeSignature"](timeSpec, customPadding), position);
      return this;
    }
  }, {
    key: "addEndTimeSignature",
    value: function addEndTimeSignature(timeSpec, customPadding) {
      this.addTimeSignature(timeSpec, customPadding, _stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.END);
      return this;
    } // Deprecated

  }, {
    key: "addTrebleGlyph",
    value: function addTrebleGlyph() {
      this.addClef('treble');
      return this;
    }
  }, {
    key: "getModifiers",
    value: function getModifiers(position, category) {
      if (position === undefined && category === undefined) return this.modifiers;
      return this.modifiers.filter(function (modifier) {
        return (position === undefined || position === modifier.getPosition()) && (category === undefined || category === modifier.getCategory());
      });
    }
  }, {
    key: "sortByCategory",
    value: function sortByCategory(items, order) {
      for (var i = items.length - 1; i >= 0; i--) {
        for (var j = 0; j < i; j++) {
          if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {
            var temp = items[j];
            items[j] = items[j + 1];
            items[j + 1] = temp;
          }
        }
      }
    }
  }, {
    key: "format",
    value: function format() {
      var begBarline = this.modifiers[0];
      var endBarline = this.modifiers[1];
      var begModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.BEGIN);
      var endModifiers = this.getModifiers(_stavemodifier__WEBPACK_IMPORTED_MODULE_4__["StaveModifier"].Position.END);
      this.sortByCategory(begModifiers, {
        barlines: 0,
        clefs: 1,
        keysignatures: 2,
        timesignatures: 3
      });
      this.sortByCategory(endModifiers, {
        timesignatures: 0,
        keysignatures: 1,
        barlines: 2,
        clefs: 3
      });

      if (begModifiers.length > 1 && begBarline.getType() === _stavebarline__WEBPACK_IMPORTED_MODULE_3__["Barline"].type.REPEAT_BEGIN) {
        begModifiers.push(begModifiers.splice(0, 1)[0]);
        begModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_3__["Barline"](_stavebarline__WEBPACK_IMPORTED_MODULE_3__["Barline"].type.SINGLE));
      }

      if (endModifiers.indexOf(endBarline) > 0) {
        endModifiers.splice(0, 0, new _stavebarline__WEBPACK_IMPORTED_MODULE_3__["Barline"](_stavebarline__WEBPACK_IMPORTED_MODULE_3__["Barline"].type.NONE));
      }

      var width;
      var padding;
      var modifier;
      var offset = 0;
      var x = this.x;

      for (var 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;
      var widths = {
        left: 0,
        right: 0,
        paddingRight: 0,
        paddingLeft: 0
      };
      var lastBarlineIdx = 0;

      for (var _i = 0; _i < endModifiers.length; _i++) {
        modifier = endModifiers[_i];
        lastBarlineIdx = modifier.getCategory() === 'barlines' ? _i : lastBarlineIdx;
        widths.right = 0;
        widths.left = 0;
        widths.paddingRight = 0;
        widths.paddingLeft = 0;
        var 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.
     */

  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();
      this.setRendered();
      if (!this.formatted) this.format();
      var num_lines = this.options.num_lines;
      var width = this.width;
      var x = this.x;
      var y; // Render lines

      for (var line = 0; line < num_lines; line++) {
        y = this.getYForLine(line);
        this.applyStyle();

        if (this.options.line_config[line].visible) {
          this.context.beginPath();
          this.context.moveTo(x, y);
          this.context.lineTo(x + width, y);
          this.context.stroke();
        }

        this.restoreStyle();
      } // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)


      for (var i = 0; i < this.modifiers.length; i++) {
        // Only draw modifier if it has a draw function
        if (typeof this.modifiers[i].draw === 'function') {
          this.modifiers[i].applyStyle(this.context);
          this.modifiers[i].draw(this, this.getModifierXShift(i));
          this.modifiers[i].restoreStyle(this.context);
        }
      } // Render measure numbers


      if (this.measure > 0) {
        this.context.save();
        this.context.setFont(this.font.family, this.font.size, this.font.weight);
        var text_width = this.context.measureText('' + this.measure).width;
        y = this.getYForTopText(0) + 3;
        this.context.fillText('' + this.measure, this.x - text_width / 2, y);
        this.context.restore();
      }

      return this;
    } // Draw Simple barlines for backward compatability
    // Do not delete - draws the beginning bar of the stave

  }, {
    key: "drawVertical",
    value: function drawVertical(x, isDouble) {
      this.drawVerticalFixed(this.x + x, isDouble);
    }
  }, {
    key: "drawVerticalFixed",
    value: function drawVerticalFixed(x, isDouble) {
      this.checkContext();
      var top_line = this.getYForLine(0);
      var bottom_line = this.getYForLine(this.options.num_lines - 1);

      if (isDouble) {
        this.context.fillRect(x - 3, top_line, 1, bottom_line - top_line + 1);
      }

      this.context.fillRect(x, top_line, 1, bottom_line - top_line + 1);
    }
  }, {
    key: "drawVerticalBar",
    value: function drawVerticalBar(x) {
      this.drawVerticalBarFixed(this.x + x, false);
    }
  }, {
    key: "drawVerticalBarFixed",
    value: function drawVerticalBarFixed(x) {
      this.checkContext();
      var top_line = this.getYForLine(0);
      var bottom_line = this.getYForLine(this.options.num_lines - 1);
      this.context.fillRect(x, top_line, 1, bottom_line - top_line + 1);
    }
    /**
     * Get the current configuration for the Stave.
     * @return {Array} An array of configuration objects.
     */

  }, {
    key: "getConfigForLines",
    value: function 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 Vex.RERR "StaveConfigError" When the specified line number is out of
     *   range of the number of lines specified in the constructor.
     */

  }, {
    key: "setConfigForLine",
    value: function setConfigForLine(line_number, line_config) {
      if (line_number >= this.options.num_lines || line_number < 0) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('StaveConfigError', 'The line number must be within the range of the number of lines in the Stave.');
      }

      if (line_config.visible === undefined) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('StaveConfigError', "The line configuration object is missing the 'visible' property.");
      }

      if (typeof line_config.visible !== 'boolean') {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('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 Vex.RERR "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.
     */

  }, {
    key: "setConfigForLines",
    value: function setConfigForLines(lines_configuration) {
      if (lines_configuration.length !== this.options.num_lines) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('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 (var line_config in lines_configuration) {
        // Allow 'null' to be used if the caller just wants the default for a particular node.
        if (!lines_configuration[line_config]) {
          lines_configuration[line_config] = this.options.line_config[line_config];
        }

        _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(this.options.line_config[line_config], lines_configuration[line_config]);
      }

      this.options.line_config = lines_configuration;
      return this;
    }
  }]);

  return Stave;
}(_element__WEBPACK_IMPORTED_MODULE_1__["Element"]);

/***/ }),

/***/ "./src/stavebarline.js":
/*!*****************************!*\
  !*** ./src/stavebarline.js ***!
  \*****************************/
/*! exports provided: Barline */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Barline", function() { return Barline; });
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// Author Larry Kuhns 2011


var Barline =
/*#__PURE__*/
function (_StaveModifier) {
  _inherits(Barline, _StaveModifier);

  _createClass(Barline, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'barlines';
    }
  }, {
    key: "type",
    get: function get() {
      return {
        SINGLE: 1,
        DOUBLE: 2,
        END: 3,
        REPEAT_BEGIN: 4,
        REPEAT_END: 5,
        REPEAT_BOTH: 6,
        NONE: 7
      };
    }
  }, {
    key: "typeString",
    get: function get() {
      return {
        single: Barline.type.SINGLE,
        "double": Barline.type.DOUBLE,
        end: Barline.type.END,
        repeatBegin: Barline.type.REPEAT_BEGIN,
        repeatEnd: Barline.type.REPEAT_END,
        repeatBoth: Barline.type.REPEAT_BOTH,
        none: Barline.type.NONE
      };
    }
    /**
     * @constructor
     */

  }]);

  function Barline(type) {
    var _this;

    _classCallCheck(this, Barline);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Barline).call(this));

    _this.setAttribute('type', 'Barline');

    _this.thickness = _tables__WEBPACK_IMPORTED_MODULE_0__["Flow"].STAVE_LINE_THICKNESS;
    var TYPE = Barline.type;
    _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_1__["StaveModifier"].Position.BEGIN);

    _this.setType(type);

    return _this;
  }

  _createClass(Barline, [{
    key: "getCategory",
    value: function getCategory() {
      return Barline.CATEGORY;
    }
  }, {
    key: "getType",
    value: function getType() {
      return this.type;
    }
  }, {
    key: "setType",
    value: function 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

  }, {
    key: "draw",
    value: function draw(stave) {
      stave.checkContext();
      this.setRendered();

      switch (this.type) {
        case Barline.type.SINGLE:
          this.drawVerticalBar(stave, this.x, false);
          break;

        case Barline.type.DOUBLE:
          this.drawVerticalBar(stave, this.x, true);
          break;

        case Barline.type.END:
          this.drawVerticalEndBar(stave, this.x);
          break;

        case Barline.type.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 Barline.type.REPEAT_END:
          this.drawRepeatBar(stave, this.x, false);
          break;

        case Barline.type.REPEAT_BOTH:
          this.drawRepeatBar(stave, this.x, false);
          this.drawRepeatBar(stave, this.x, true);
          break;

        default:
          // Default is NONE, so nothing to draw
          break;
      }
    }
  }, {
    key: "drawVerticalBar",
    value: function drawVerticalBar(stave, x, double_bar) {
      stave.checkContext();
      var topY = stave.getTopLineTopY();
      var botY = stave.getBottomLineBottomY();

      if (double_bar) {
        stave.context.fillRect(x - 3, topY, 1, botY - topY);
      }

      stave.context.fillRect(x, topY, 1, botY - topY);
    }
  }, {
    key: "drawVerticalEndBar",
    value: function drawVerticalEndBar(stave, x) {
      stave.checkContext();
      var topY = stave.getTopLineTopY();
      var botY = stave.getBottomLineBottomY();
      stave.context.fillRect(x - 5, topY, 1, botY - topY);
      stave.context.fillRect(x - 2, topY, 3, botY - topY);
    }
  }, {
    key: "drawRepeatBar",
    value: function drawRepeatBar(stave, x, begin) {
      stave.checkContext();
      var topY = stave.getTopLineTopY();
      var botY = stave.getBottomLineBottomY();
      var x_shift = 3;

      if (!begin) {
        x_shift = -5;
      }

      stave.context.fillRect(x + x_shift, topY, 1, botY - topY);
      stave.context.fillRect(x - 2, topY, 3, botY - topY);
      var dot_radius = 2; // Shift dots left or right

      if (begin) {
        x_shift += 4;
      } else {
        x_shift -= 4;
      }

      var dot_x = x + x_shift + dot_radius / 2; // calculate the y offset based on number of stave lines

      var y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();
      y_offset = y_offset / 2 - stave.getSpacingBetweenLines() / 2;
      var dot_y = topY + y_offset + dot_radius / 2; // draw the top repeat dot

      stave.context.beginPath();
      stave.context.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);
      stave.context.fill(); // draw the bottom repeat dot

      dot_y += stave.getSpacingBetweenLines();
      stave.context.beginPath();
      stave.context.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);
      stave.context.fill();
    }
  }]);

  return Barline;
}(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__["StaveModifier"]);

/***/ }),

/***/ "./src/staveconnector.js":
/*!*******************************!*\
  !*** ./src/staveconnector.js ***!
  \*******************************/
/*! exports provided: StaveConnector */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StaveConnector", function() { return StaveConnector; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.





function drawBoldDoubleLine(ctx, type, topX, topY, botY) {
  if (type !== StaveConnector.type.BOLD_DOUBLE_LEFT && type !== StaveConnector.type.BOLD_DOUBLE_RIGHT) {
    throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.');
  }

  var x_shift = 3;
  var variableWidth = 3.5; // Width for avoiding anti-aliasing width issues

  var 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);
}

var StaveConnector =
/*#__PURE__*/
function (_Element) {
  _inherits(StaveConnector, _Element);

  _createClass(StaveConnector, null, [{
    key: "type",
    // SINGLE_LEFT and SINGLE are the same value for compatibility
    // with older versions of vexflow which didn't have right sided
    // stave connectors
    get: function get() {
      return {
        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
      };
    }
  }, {
    key: "typeString",
    get: function get() {
      return {
        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
      };
    }
  }]);

  function StaveConnector(top_stave, bottom_stave) {
    var _this;

    _classCallCheck(this, StaveConnector);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(StaveConnector).call(this));

    _this.setAttribute('type', 'StaveConnector');

    _this.thickness = _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].STAVE_LINE_THICKNESS;
    _this.width = 3;
    _this.top_stave = top_stave;
    _this.bottom_stave = bottom_stave;
    _this.type = StaveConnector.type.DOUBLE;
    _this.font = {
      family: 'times',
      size: 16,
      weight: 'normal'
    }; // 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 = [];
    return _this;
  }

  _createClass(StaveConnector, [{
    key: "setType",
    value: function setType(type) {
      type = typeof type === 'string' ? StaveConnector.typeString[type] : type;

      if (type >= StaveConnector.type.SINGLE_RIGHT && type <= StaveConnector.type.NONE) {
        this.type = type;
      }

      return this;
    }
  }, {
    key: "setText",
    value: function setText(text, options) {
      this.texts.push({
        content: text,
        options: _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge({
          shift_x: 0,
          shift_y: 0
        }, options)
      });
      return this;
    }
  }, {
    key: "setFont",
    value: function setFont(font) {
      _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(this.font, font);
    }
  }, {
    key: "setXShift",
    value: function setXShift(x_shift) {
      if (typeof x_shift !== 'number') {
        throw _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('InvalidType', 'x_shift must be a Number');
      }

      this.x_shift = x_shift;
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      var ctx = this.checkContext();
      this.setRendered();
      var topY = this.top_stave.getYForLine(0);
      var botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) + this.thickness;
      var width = this.width;
      var topX = this.top_stave.getX();
      var 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.width;
      }

      var 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

            var x1 = this.top_stave.getX() - 2 + this.x_shift;
            var y1 = topY;
            var x3 = x1;
            var y3 = botY;
            var x2 = x1 - width;
            var y2 = y1 + attachment_height / 2.0;
            var cpx1 = x2 - 0.90 * width;
            var cpy1 = y1 + 0.2 * attachment_height;
            var cpx2 = x1 + 1.10 * width;
            var cpy2 = y2 - 0.135 * attachment_height;
            var cpx3 = cpx2;
            var cpy3 = y2 + 0.135 * attachment_height;
            var cpx4 = cpx1;
            var cpy4 = y3 - 0.2 * attachment_height;
            var cpx5 = x2 - width;
            var cpy5 = cpy4;
            var cpx6 = x1 + 0.40 * width;
            var cpy6 = y2 + 0.135 * attachment_height;
            var cpx7 = cpx6;
            var cpy7 = y2 - 0.135 * attachment_height;
            var cpx8 = cpx5;
            var 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_3__["Glyph"].renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');
          _glyph__WEBPACK_IMPORTED_MODULE_3__["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 _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('InvalidType', "The provided StaveConnector.type (".concat(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.lineWidth = 2;
      ctx.setFont(this.font.family, this.font.size, this.font.weight); // Add stave connector text

      for (var i = 0; i < this.texts.length; i++) {
        var text = this.texts[i];
        var text_width = ctx.measureText('' + text.content).width;
        var x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;
        var y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 + text.options.shift_y;
        ctx.fillText('' + text.content, x, y + 4);
      }

      ctx.restore();
    }
  }]);

  return StaveConnector;
}(_element__WEBPACK_IMPORTED_MODULE_1__["Element"]);

/***/ }),

/***/ "./src/stavehairpin.js":
/*!*****************************!*\
  !*** ./src/stavehairpin.js ***!
  \*****************************/
/*! exports provided: StaveHairpin */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StaveHairpin", function() { return StaveHairpin; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// This class by Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/
//
// This class implements hairpins between notes.
// Hairpins can be either Crescendo or Descrescendo.



var StaveHairpin =
/*#__PURE__*/
function (_Element) {
  _inherits(StaveHairpin, _Element);

  _createClass(StaveHairpin, null, [{
    key: "FormatByTicksAndDraw",

    /* 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
     *  }
     *
     **/
    value: function FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {
      var ppt = formatter.pixelsPerTick;

      if (ppt == null) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', 'A valid Formatter must be provide to draw offsets by ticks.');
      }

      var l_shift_px = ppt * options.left_shift_ticks;
      var r_shift_px = ppt * options.right_shift_ticks;
      var hairpin_options = {
        height: options.height,
        y_shift: options.y_shift,
        left_shift_px: l_shift_px,
        right_shift_px: r_shift_px
      };
      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.
     *
     * @constructor
     * @param {!Object} notes The notes to tie up.
     * @param {!Object} type The type of hairpin
     */

  }, {
    key: "type",
    get: function get() {
      return {
        CRESC: 1,
        DECRESC: 2
      };
    }
  }]);

  function StaveHairpin(notes, type) {
    var _this;

    _classCallCheck(this, StaveHairpin);

    /**
     * Notes is a struct that has:
     *
     *  {
     *    first_note: Note,
     *    last_note: Note,
     *  }
     *
     **/
    _this = _possibleConstructorReturn(this, _getPrototypeOf(StaveHairpin).call(this));

    _this.setAttribute('type', 'StaveHairpin');

    _this.notes = notes;
    _this.hairpin = type;
    _this.position = _modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"].Position.BELOW;
    _this.render_options = {
      height: 10,
      y_shift: 0,
      // vertical offset
      left_shift_px: 0,
      // left horizontal offset
      right_shift_px: 0 // right horizontal offset

    };

    _this.setNotes(notes);

    return _this;
  }

  _createClass(StaveHairpin, [{
    key: "setPosition",
    value: function setPosition(position) {
      if (position === _modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"].Position.ABOVE || position === _modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"].Position.BELOW) {
        this.position = position;
      }

      return this;
    }
  }, {
    key: "setRenderOptions",
    value: function 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.
     */

  }, {
    key: "setNotes",
    value: function setNotes(notes) {
      if (!notes.first_note && !notes.last_note) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', 'Hairpin needs to have either first_note or last_note set.');
      } // Success. Lets grab 'em notes.


      this.first_note = notes.first_note;
      this.last_note = notes.last_note;
      return this;
    }
  }, {
    key: "renderHairpin",
    value: function renderHairpin(params) {
      var ctx = this.checkContext();
      var dis = this.render_options.y_shift + 20;
      var y_shift = params.first_y;

      if (this.position === _modifier__WEBPACK_IMPORTED_MODULE_2__["Modifier"].Position.ABOVE) {
        dis = -dis + 30;
        y_shift = params.first_y - params.staff_height;
      }

      var l_shift = this.render_options.left_shift_px;
      var 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();
    }
  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();
      this.setRendered();
      var firstNote = this.first_note;
      var lastNote = this.last_note;
      var start = firstNote.getModifierStartXY(this.position, 0);
      var end = lastNote.getModifierStartXY(this.position, 0);
      this.renderHairpin({
        first_x: start.x,
        last_x: end.x,
        first_y: firstNote.getStave().y + firstNote.getStave().height,
        last_y: lastNote.getStave().y + lastNote.getStave().height,
        staff_height: firstNote.getStave().height
      });
      return true;
    }
  }]);

  return StaveHairpin;
}(_element__WEBPACK_IMPORTED_MODULE_1__["Element"]);

/***/ }),

/***/ "./src/staveline.js":
/*!**************************!*\
  !*** ./src/staveline.js ***!
  \**************************/
/*! exports provided: StaveLine */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StaveLine", function() { return StaveLine; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://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();
} // Helper function to draw a line with arrow heads


function drawArrowLine(ctx, point1, point2, config) {
  var both_arrows = config.draw_start_arrow && config.draw_end_arrow;
  var x1 = point1.x;
  var y1 = point1.y;
  var x2 = point2.x;
  var y2 = point2.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.

  var distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
  var ratio = (distance - config.arrowhead_length / 3) / distance;
  var end_x;
  var end_y;
  var start_x;
  var start_y;

  if (config.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 (config.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 (config.color) {
    ctx.setStrokeStyle(config.color);
    ctx.setFillStyle(config.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

  var line_angle = Math.atan2(y2 - y1, x2 - x1); // h is the line length of a side of the arrow head

  var h = Math.abs(config.arrowhead_length / Math.cos(config.arrowhead_angle));
  var angle1;
  var angle2;
  var top_x;
  var top_y;
  var bottom_x;
  var bottom_y;

  if (config.draw_end_arrow || both_arrows) {
    angle1 = line_angle + Math.PI + config.arrowhead_angle;
    top_x = x2 + Math.cos(angle1) * h;
    top_y = y2 + Math.sin(angle1) * h;
    angle2 = line_angle + Math.PI - config.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 (config.draw_start_arrow || both_arrows) {
    angle1 = line_angle + config.arrowhead_angle;
    top_x = x1 + Math.cos(angle1) * h;
    top_y = y1 + Math.sin(angle1) * h;
    angle2 = line_angle - config.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);
  }
}

var StaveLine =
/*#__PURE__*/
function (_Element) {
  _inherits(StaveLine, _Element);

  _createClass(StaveLine, null, [{
    key: "TextVerticalPosition",
    // Text Positioning
    get: function get() {
      return {
        TOP: 1,
        BOTTOM: 2
      };
    }
  }, {
    key: "TextJustification",
    get: function get() {
      return {
        LEFT: 1,
        CENTER: 2,
        RIGHT: 3
      };
    } // 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]
    //  }
    //  ```

  }]);

  function StaveLine(notes) {
    var _this;

    _classCallCheck(this, StaveLine);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(StaveLine).call(this));

    _this.setAttribute('type', 'StaveLine');

    _this.notes = notes;
    _this.text = '';
    _this.font = {
      family: 'Arial',
      size: 10,
      weight: ''
    };
    _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. Unsupported with Raphael (SVG)
      line_dash: null,
      // Can draw rounded line end, instead of a square. Unsupported with Raphael (SVG)
      rounded_end: true,
      // The color of the line and arrowheads
      color: null,
      // 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
    };

    _this.setNotes(notes);

    return _this;
  } // Set the font for the `StaveLine` text


  _createClass(StaveLine, [{
    key: "setFont",
    value: function setFont(font) {
      this.font = font;
      return this;
    } // The the annotation for the `StaveLine`

  }, {
    key: "setText",
    value: function setText(text) {
      this.text = text;
      return this;
    } // Set the notes for the `StaveLine`

  }, {
    key: "setNotes",
    value: function setNotes(notes) {
      if (!notes.first_note && !notes.last_note) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].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 _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', 'Connected notes must have similar index sizes');
      } // Success. Lets grab 'em 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

  }, {
    key: "applyLineStyle",
    value: function applyLineStyle() {
      var ctx = this.checkContext();
      var 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

  }, {
    key: "applyFontStyle",
    value: function applyFontStyle() {
      var ctx = this.checkContext();

      if (this.font) {
        ctx.setFont(this.font.family, this.font.size, this.font.weight);
      }

      if (this.render_options.color) {
        ctx.setStrokeStyle(this.render_options.color);
        ctx.setFillStyle(this.render_options.color);
      }
    } // Renders the `StaveLine` on the context

  }, {
    key: "draw",
    value: function draw() {
      var _this2 = this;

      var ctx = this.checkContext();
      this.setRendered();
      var first_note = this.first_note;
      var last_note = this.last_note;
      var render_options = this.render_options;
      ctx.save();
      this.applyLineStyle(); // Cycle through each set of indices and draw lines

      var start_position;
      var end_position;
      this.first_indices.forEach(function (first_index, i) {
        var last_index = _this2.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);
        var 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

        var notehead_width = first_note.getGlyph().getWidth();
        var 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


        var 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;
        drawArrowLine(ctx, start_position, end_position, _this2.render_options);
      });
      ctx.restore(); // Determine the x coordinate where to start the text

      var text_width = ctx.measureText(this.text).width;
      var justification = render_options.text_justification;
      var x = 0;

      if (justification === StaveLine.TextJustification.LEFT) {
        x = start_position.x;
      } else if (justification === StaveLine.TextJustification.CENTER) {
        var delta_x = end_position.x - start_position.x;
        var 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


      var y;
      var vertical_position = render_options.text_position_vertical;

      if (vertical_position === StaveLine.TextVerticalPosition.TOP) {
        y = first_note.getStave().getYForTopText();
      } else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {
        y = first_note.getStave().getYForBottomText(_tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].TEXT_HEIGHT_OFFSET_HACK);
      } // Draw the text


      ctx.save();
      this.applyFontStyle();
      ctx.fillText(this.text, x, y);
      ctx.restore();
      return this;
    }
  }]);

  return StaveLine;
}(_element__WEBPACK_IMPORTED_MODULE_1__["Element"]);

/***/ }),

/***/ "./src/stavemodifier.js":
/*!******************************!*\
  !*** ./src/stavemodifier.js ***!
  \******************************/
/*! exports provided: StaveModifier */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StaveModifier", function() { return StaveModifier; });
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// A base class for stave modifiers (e.g. clefs, key signatures)

var StaveModifier =
/*#__PURE__*/
function (_Element) {
  _inherits(StaveModifier, _Element);

  _createClass(StaveModifier, null, [{
    key: "Position",
    get: function get() {
      return {
        LEFT: 1,
        RIGHT: 2,
        ABOVE: 3,
        BELOW: 4,
        BEGIN: 5,
        END: 6
      };
    }
  }]);

  function StaveModifier() {
    var _this;

    _classCallCheck(this, StaveModifier);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(StaveModifier).call(this));

    _this.setAttribute('type', 'StaveModifier');

    _this.padding = 10;
    _this.position = StaveModifier.Position.ABOVE;
    _this.layoutMetrics = null;
    return _this;
  }

  _createClass(StaveModifier, [{
    key: "getPosition",
    value: function getPosition() {
      return this.position;
    }
  }, {
    key: "setPosition",
    value: function setPosition(position) {
      this.position = position;
      return this;
    }
  }, {
    key: "getStave",
    value: function getStave() {
      return this.stave;
    }
  }, {
    key: "setStave",
    value: function setStave(stave) {
      this.stave = stave;
      return this;
    }
  }, {
    key: "getWidth",
    value: function getWidth() {
      return this.width;
    }
  }, {
    key: "setWidth",
    value: function setWidth(width) {
      this.width = width;
      return this;
    }
  }, {
    key: "getX",
    value: function getX() {
      return this.x;
    }
  }, {
    key: "setX",
    value: function setX(x) {
      this.x = x;
      return this;
    }
  }, {
    key: "getCategory",
    value: function getCategory() {
      return '';
    }
  }, {
    key: "makeSpacer",
    value: function makeSpacer(padding) {
      // TODO(0xfe): Return an instance of type `Spacer` based on `GhostNote`
      // instead of this hack.
      return {
        getContext: function getContext() {
          return true;
        },
        setStave: function setStave() {},
        renderToStave: function renderToStave() {},
        getMetrics: function getMetrics() {
          return {
            width: padding
          };
        }
      };
    }
  }, {
    key: "placeGlyphOnLine",
    value: function placeGlyphOnLine(glyph, stave, line) {
      var customShift = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
      glyph.setYShift(stave.getYForLine(line) - stave.getYForGlyphs() + customShift);
    }
  }, {
    key: "getPadding",
    value: function getPadding(index) {
      return index !== undefined && index < 2 ? 0 : this.padding;
    }
  }, {
    key: "setPadding",
    value: function setPadding(padding) {
      this.padding = padding;
      return this;
    }
  }, {
    key: "setLayoutMetrics",
    value: function setLayoutMetrics(layoutMetrics) {
      this.layoutMetrics = layoutMetrics;
      return this;
    }
  }, {
    key: "getLayoutMetrics",
    value: function getLayoutMetrics() {
      return this.layoutMetrics;
    }
  }]);

  return StaveModifier;
}(_element__WEBPACK_IMPORTED_MODULE_0__["Element"]);

/***/ }),

/***/ "./src/stavenote.js":
/*!**************************!*\
  !*** ./src/stavenote.js ***!
  \**************************/
/*! exports provided: StaveNote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StaveNote", function() { return StaveNote; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _boundingbox__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./boundingbox */ "./src/boundingbox.js");
/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.js");
/* harmony import */ var _notehead__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./notehead */ "./src/notehead.js");
/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./dot */ "./src/dot.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }

function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// 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.js` for usage examples.







 // To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (StaveNote.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.StaveNote', args);
}

var getStemAdjustment = function getStemAdjustment(note) {
  return _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].WIDTH / (2 * -note.getStemDirection());
};

var isInnerNoteIndex = function isInnerNoteIndex(note, index) {
  return 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) {
  var delta = (note.isrest ? 0.0 : 1.0) * 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) {
  var delta = rest.line - _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].MidLine(noteU.minLine, noteL.maxLine);
  rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);
  rest.line -= delta;
  rest.maxLine -= delta;
  rest.minLine -= delta;
}

var StaveNote =
/*#__PURE__*/
function (_StemmableNote) {
  _inherits(StaveNote, _StemmableNote);

  _createClass(StaveNote, null, [{
    key: "format",
    // ## Static Methods
    //
    // Format notes inside a ModifierContext.
    value: function format(notes, state) {
      if (!notes || notes.length < 2) return false; // FIXME: VexFlow will soon require that a stave be set before formatting.
      // Which, according to the below condition, means that following branch will
      // always be taken and the rest of this function is dead code.
      //
      // Problematically, `Formatter#formatByY` was not designed to work for more
      // than 2 voices (although, doesn't throw on this condition, just tries
      // to power through).
      //
      // Based on the above:
      //   * 2 voices can be formatted *with or without* a stave being set but
      //     the output will be different
      //   * 3 voices can only be formatted *without* a stave

      if (notes[0].getStave()) {
        return StaveNote.formatByY(notes, state);
      }

      var notesList = [];

      for (var i = 0; i < notes.length; i++) {
        var props = notes[i].getKeyProps();
        var line = props[0].line;
        var minL = props[props.length - 1].line;
        var stemDirection = notes[i].getStemDirection();
        var stemMax = notes[i].getStemLength() / 10;
        var stemMin = notes[i].getStemMinumumLength() / 10;
        var maxL = void 0;

        if (notes[i].isRest()) {
          maxL = line + notes[i].glyph.line_above;
          minL = line - notes[i].glyph.line_below;
        } else {
          maxL = stemDirection === 1 ? props[props.length - 1].line + stemMax : props[props.length - 1].line;
          minL = stemDirection === 1 ? props[0].line : props[0].line - stemMax;
        }

        notesList.push({
          line: props[0].line,
          // note/rest base line
          maxLine: maxL,
          // note/rest upper bounds line
          minLine: minL,
          // note/rest lower bounds line
          isrest: notes[i].isRest(),
          stemDirection: stemDirection,
          stemMax: stemMax,
          // Maximum (default) note stem length;
          stemMin: stemMin,
          // minimum note stem length
          voice_shift: notes[i].getVoiceShiftWidth(),
          is_displaced: notes[i].isDisplaced(),
          // note manually displaced
          note: notes[i]
        });
      }

      var voices = notesList.length;
      var noteU = notesList[0];
      var noteM = voices > 2 ? notesList[1] : null;
      var noteL = voices > 2 ? notesList[2] : notesList[1]; // 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];
      }

      var voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);
      var xShift = 0;
      var stemDelta; // Test for two voice note intersection

      if (voices === 2) {
        var lineSpacing = noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5; // if top voice is a middle voice, check stem intersection with lower voice

        if (noteU.stemDirection === noteL.stemDirection && noteU.minLine <= noteL.maxLine) {
          if (!noteU.isrest) {
            stemDelta = Math.abs(noteU.line - (noteL.maxLine + 0.5));
            stemDelta = Math.max(stemDelta, noteU.stemMin);
            noteU.minLine = noteU.line - stemDelta;
            noteU.note.setStemLength(stemDelta * 10);
          }
        }

        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 {
            xShift = voiceXShift;

            if (noteU.stemDirection === noteL.stemDirection) {
              // upper voice is middle voice, so shift it right
              noteU.note.setXShift(xShift + 3);
            } else {
              // shift lower voice right
              noteL.note.setXShift(xShift);
            }
          }
        } // format complete


        return true;
      } // Check middle voice stem intersection with lower voice


      if (noteM !== null && noteM.minLine < noteL.maxLine + 0.5) {
        if (!noteM.isrest) {
          stemDelta = Math.abs(noteM.line - (noteL.maxLine + 0.5));
          stemDelta = Math.max(stemDelta, noteM.stemMin);
          noteM.minLine = noteM.line - stemDelta;
          noteM.note.setStemLength(stemDelta * 10);
        }
      } // 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) {
          var restHeight = noteM.maxLine - noteM.minLine;
          var 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 + 3; // shift middle rest right

            noteM.note.setXShift(xShift);
          } // format complete


          return true;
        }
      } // Special case 2 :: all voices are rests


      if (noteU.isrest && noteM.isrest && noteL.isrest) {
        // Shift upper voice rest up
        shiftRestVertical(noteU, noteM, 1); // Shift lower voice rest down

        shiftRestVertical(noteL, noteM, -1); // format complete

        return true;
      } // Test if any other rests can be repositioned


      if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {
        // Shift middle voice rest up
        shiftRestVertical(noteM, noteL, 1);
      }

      if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {
        // Shift middle voice rest down
        shiftRestVertical(noteM, noteU, -1);
      }

      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.isrest && !noteM.isrest && noteU.minLine <= noteM.maxLine + 0.5 || !noteM.isrest && !noteL.isrest && noteM.minLine <= noteL.maxLine) {
        xShift = voiceXShift + 3; // shift middle note right

        noteM.note.setXShift(xShift);
      }

      return true;
    }
  }, {
    key: "formatByY",
    value: function formatByY(notes, state) {
      // NOTE: this function does not support more than two voices per stave
      // use with care.
      var hasStave = true;

      for (var i = 0; i < notes.length; i++) {
        hasStave = hasStave && notes[i].getStave() != null;
      }

      if (!hasStave) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('Stave Missing', 'All notes must have a stave - Vex.Flow.ModifierContext.formatMultiVoice!');
      }

      var xShift = 0;

      for (var _i = 0; _i < notes.length - 1; _i++) {
        var topNote = notes[_i];
        var bottomNote = notes[_i + 1];

        if (topNote.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].DOWN) {
          topNote = notes[_i + 1];
          bottomNote = notes[_i];
        }

        var topKeys = topNote.getKeyProps();
        var bottomKeys = bottomNote.getKeyProps();
        var HALF_NOTEHEAD_HEIGHT = 0.5; // `keyProps` and `stave.getYForLine` have different notions of a `line`
        // so we have to convert the keyProps value by subtracting 5.
        // See https://github.com/0xfe/vexflow/wiki/Development-Gotchas
        //
        // We also extend the y for each note by a half notehead because the
        // notehead's origin is centered

        var topNoteBottomY = topNote.getStave().getYForLine(5 - topKeys[0].line + HALF_NOTEHEAD_HEIGHT);
        var bottomNoteTopY = bottomNote.getStave().getYForLine(5 - bottomKeys[bottomKeys.length - 1].line - HALF_NOTEHEAD_HEIGHT);
        var areNotesColliding = bottomNoteTopY - topNoteBottomY < 0;

        if (areNotesColliding) {
          xShift = topNote.getVoiceShiftWidth() + 2;
          bottomNote.setXShift(xShift);
        }
      }

      state.right_shift += xShift;
    }
  }, {
    key: "postFormat",
    value: function postFormat(notes) {
      if (!notes) return false;
      notes.forEach(function (note) {
        return note.postFormat();
      });
      return true;
    }
  }, {
    key: "CATEGORY",
    get: function get() {
      return 'stavenotes';
    }
  }, {
    key: "STEM_UP",
    get: function get() {
      return _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].UP;
    }
  }, {
    key: "STEM_DOWN",
    get: function get() {
      return _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].DOWN;
    }
  }, {
    key: "DEFAULT_LEDGER_LINE_OFFSET",
    get: function get() {
      return 3;
    }
  }]);

  function StaveNote(noteStruct) {
    var _this;

    _classCallCheck(this, StaveNote);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(StaveNote).call(this, noteStruct));

    _this.setAttribute('type', 'StaveNote');

    _this.keys = noteStruct.keys;
    _this.clef = noteStruct.clef;
    _this.octave_shift = noteStruct.octave_shift;
    _this.beam = null; // Pull note rendering properties

    _this.glyph = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].getGlyphProps(_this.duration, _this.noteType);

    if (!_this.glyph) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', "Invalid note initialization data (No glyph found): ".concat(JSON.stringify(noteStruct)));
    } // if true, displace note to right


    _this.displaced = false;
    _this.dot_shiftY = 0; // per-pitch properties

    _this.keyProps = []; // for displaced ledger lines

    _this.use_default_head_x = false; // Drawing

    _this.note_heads = [];
    _this.modifiers = [];
    _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(_this.render_options, {
      // font size for note heads and rests
      glyph_font_scale: noteStruct.glyph_font_scale || _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].DEFAULT_NOTATION_FONT_SCALE,
      // number of stroke px to the left and right of head
      stroke_px: noteStruct.stroke_px || StaveNote.DEFAULT_LEDGER_LINE_OFFSET
    });

    _this.calculateKeyProps();

    _this.buildStem(); // Set the stem direction


    if (noteStruct.auto_stem) {
      _this.autoStem();
    } else {
      _this.setStemDirection(noteStruct.stem_direction);
    }

    _this.reset();

    _this.buildFlag();

    return _this;
  }

  _createClass(StaveNote, [{
    key: "reset",
    value: function reset() {
      var _this2 = this;

      _get(_getPrototypeOf(StaveNote.prototype), "reset", this).call(this); // Save prior noteHead styles & reapply them after making new noteheads.


      var noteHeadStyles = this.note_heads.map(function (noteHead) {
        return noteHead.getStyle();
      });
      this.buildNoteHeads();
      this.note_heads.forEach(function (noteHead, index) {
        return noteHead.setStyle(noteHeadStyles[index]);
      });

      if (this.stave) {
        this.note_heads.forEach(function (head) {
          return head.setStave(_this2.stave);
        });
      }

      this.calcNoteDisplacements();
    }
  }, {
    key: "setBeam",
    value: function setBeam(beam) {
      this.beam = beam;
      this.calcNoteDisplacements();
      return this;
    }
  }, {
    key: "getCategory",
    value: function getCategory() {
      return StaveNote.CATEGORY;
    } // Builds a `Stem` for the note

  }, {
    key: "buildStem",
    value: function buildStem() {
      this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"]({
        hide: !!this.isRest()
      }));
    } // Builds a `NoteHead` for each key in the note

  }, {
    key: "buildNoteHeads",
    value: function buildNoteHeads() {
      this.note_heads = [];
      var stemDirection = this.getStemDirection();
      var keys = this.getKeys();
      var lastLine = null;
      var lineDiff = null;
      var displaced = false; // Draw notes from bottom to top.
      // For down-stem notes, we draw from top to bottom.

      var start;
      var end;
      var step;

      if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].UP) {
        start = 0;
        end = keys.length;
        step = 1;
      } else if (stemDirection === _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].DOWN) {
        start = keys.length - 1;
        end = -1;
        step = -1;
      }

      for (var i = start; i !== end; i += step) {
        var noteProps = this.keyProps[i];
        var line = noteProps.line; // Keep track of last line with a note head, so that consecutive heads
        // are correctly displaced.

        if (lastLine === null) {
          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;
        var notehead = new _notehead__WEBPACK_IMPORTED_MODULE_4__["NoteHead"]({
          duration: this.duration,
          note_type: this.noteType,
          displaced: 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.note_heads[i] = notehead;
      }
    } // Automatically sets the stem direction based on the keys in the note

  }, {
    key: "autoStem",
    value: function autoStem() {
      // Figure out optimal stem direction based on given notes
      this.minLine = this.keyProps[0].line;
      this.maxLine = this.keyProps[this.keyProps.length - 1].line;
      var MIDDLE_LINE = 3;
      var decider = (this.minLine + this.maxLine) / 2;
      var stemDirection = decider < MIDDLE_LINE ? _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].UP : _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].DOWN;
      this.setStemDirection(stemDirection);
    } // Calculates and stores the properties for each key in the note

  }, {
    key: "calculateKeyProps",
    value: function calculateKeyProps() {
      var lastLine = null;

      for (var i = 0; i < this.keys.length; ++i) {
        var key = this.keys[i]; // All rests use the same position on the line.
        // if (this.glyph.rest) key = this.glyph.position;

        if (this.glyph.rest) this.glyph.position = key;
        var options = {
          octave_shift: this.octave_shift || 0
        };
        var props = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].keyProperties(key, this.clef, options);

        if (!props) {
          throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', "Invalid key for note properties: ".concat(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


        var line = props.line;

        if (lastLine === null) {
          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


      lastLine = -Infinity;
      this.keyProps.forEach(function (key) {
        if (key.line < lastLine) {
          _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].W('Unsorted keys in note will be sorted. ' + 'See https://github.com/0xfe/vexflow/issues/104 for details.');
        }

        lastLine = key.line;
      });
      this.keyProps.sort(function (a, b) {
        return a.line - b.line;
      });
    } // Get the `BoundingBox` for the entire note

  }, {
    key: "getBoundingBox",
    value: function getBoundingBox() {
      if (!this.preFormatted) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('UnformattedNote', "Can't call getBoundingBox on an unformatted note.");
      }

      var _this$getMetrics = this.getMetrics(),
          w = _this$getMetrics.width,
          modLeftPx = _this$getMetrics.modLeftPx,
          leftDisplacedHeadPx = _this$getMetrics.leftDisplacedHeadPx;

      var x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;
      var minY = 0;
      var maxY = 0;
      var halfLineSpacing = this.getStave().getSpacingBetweenLines() / 2;
      var lineSpacing = halfLineSpacing * 2;

      if (this.isRest()) {
        var y = this.ys[0];
        var frac = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].durationToFraction(this.duration);

        if (frac.equals(1) || frac.equals(2)) {
          minY = y - halfLineSpacing;
          maxY = y + halfLineSpacing;
        } else {
          minY = y - this.glyph.line_above * lineSpacing;
          maxY = y + this.glyph.line_below * lineSpacing;
        }
      } else if (this.glyph.stem) {
        var ys = this.getStemExtents();
        ys.baseY += halfLineSpacing * this.stem_direction;
        minY = Math.min(ys.topY, ys.baseY);
        maxY = Math.max(ys.topY, ys.baseY);
      } else {
        minY = null;
        maxY = null;

        for (var i = 0; i < this.ys.length; ++i) {
          var 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_2__["BoundingBox"](x, minY, w, maxY - minY);
    } // Gets the line number of the top or bottom note in the chord.
    // If `isTopNote` is `true` then get the top note

  }, {
    key: "getLineNumber",
    value: function getLineNumber(isTopNote) {
      if (!this.keyProps.length) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoKeyProps', "Can't get bottom note line, because note is not initialized properly.");
      }

      var resultLine = this.keyProps[0].line; // No precondition assumed for sortedness of keyProps array

      for (var i = 0; i < this.keyProps.length; i++) {
        var thisLine = this.keyProps[i].line;

        if (isTopNote) {
          if (thisLine > resultLine) resultLine = thisLine;
        } else {
          if (thisLine < resultLine) resultLine = thisLine;
        }
      }

      return resultLine;
    } // Determine if current note is a rest

  }, {
    key: "isRest",
    value: function isRest() {
      return this.glyph.rest;
    } // Determine if the current note is a chord

  }, {
    key: "isChord",
    value: function isChord() {
      return !this.isRest() && this.keys.length > 1;
    } // Determine if the `StaveNote` has a stem

  }, {
    key: "hasStem",
    value: function hasStem() {
      return this.glyph.stem;
    }
  }, {
    key: "hasFlag",
    value: function hasFlag() {
      return _get(_getPrototypeOf(StaveNote.prototype), "hasFlag", this).call(this) && !this.isRest();
    }
  }, {
    key: "getStemX",
    value: function 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 _get(_getPrototypeOf(StaveNote.prototype), "getStemX", this).call(this) + getStemAdjustment(this);
      }
    } // Get the `y` coordinate for text placed on the top/bottom of a
    // note at a desired `text_line`

  }, {
    key: "getYForTopText",
    value: function getYForTopText(textLine) {
      var extents = this.getStemExtents();
      return Math.min(this.stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));
    }
  }, {
    key: "getYForBottomText",
    value: function getYForBottomText(textLine) {
      var extents = this.getStemExtents();
      return Math.max(this.stave.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`.

  }, {
    key: "setStave",
    value: function setStave(stave) {
      _get(_getPrototypeOf(StaveNote.prototype), "setStave", this).call(this, stave);

      var ys = this.note_heads.map(function (notehead) {
        notehead.setStave(stave);
        return notehead.getY();
      });
      this.setYs(ys);

      if (this.stem) {
        var _this$getNoteHeadBoun = this.getNoteHeadBounds(),
            y_top = _this$getNoteHeadBoun.y_top,
            y_bottom = _this$getNoteHeadBoun.y_bottom;

        this.stem.setYBounds(y_top, y_bottom);
      }

      return this;
    } // Get the pitches in the note

  }, {
    key: "getKeys",
    value: function getKeys() {
      return this.keys;
    } // Get the properties for all the keys in the note

  }, {
    key: "getKeyProps",
    value: function getKeyProps() {
      return this.keyProps;
    } // Check if note is shifted to the right

  }, {
    key: "isDisplaced",
    value: function isDisplaced() {
      return this.displaced;
    } // Sets whether shift note to the right. `displaced` is a `boolean`

  }, {
    key: "setNoteDisplaced",
    value: function setNoteDisplaced(displaced) {
      this.displaced = displaced;
      return this;
    } // Get the starting `x` coordinate for a `StaveTie`

  }, {
    key: "getTieRightX",
    value: function getTieRightX() {
      var 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`

  }, {
    key: "getTieLeftX",
    value: function getTieLeftX() {
      var tieEndX = this.getAbsoluteX();
      tieEndX += this.x_shift - this.leftDisplacedHeadPx;
      return tieEndX;
    } // Get the stave line on which to place a rest

  }, {
    key: "getLineForRest",
    value: function getLineForRest() {
      var restLine = this.keyProps[0].line;

      if (this.keyProps.length > 1) {
        var lastLine = this.keyProps[this.keyProps.length - 1].line;
        var top = Math.max(restLine, lastLine);
        var bot = Math.min(restLine, lastLine);
        restLine = _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].MidLine(top, bot);
      }

      return restLine;
    } // Get the default `x` and `y` coordinates for the provided `position`
    // and key `index`

  }, {
    key: "getModifierStartXY",
    value: function getModifierStartXY(position, index, options) {
      options = options || {};

      if (!this.preFormatted) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note");
      }

      if (this.ys.length === 0) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoYValues', 'No Y-Values calculated for this note.');
      }

      var _Modifier$Position = _modifier__WEBPACK_IMPORTED_MODULE_6__["Modifier"].Position,
          ABOVE = _Modifier$Position.ABOVE,
          BELOW = _Modifier$Position.BELOW,
          LEFT = _Modifier$Position.LEFT,
          RIGHT = _Modifier$Position.RIGHT;
      var 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 += this.flag.getMetrics().width;
        }
      } 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.

  }, {
    key: "setStyle",
    value: function setStyle(style) {
      _get(_getPrototypeOf(StaveNote.prototype), "setStyle", this).call(this, style);

      this.note_heads.forEach(function (notehead) {
        return notehead.setStyle(style);
      });
      this.stem.setStyle(style);
    }
  }, {
    key: "setStemStyle",
    value: function setStemStyle(style) {
      var stem = this.getStem();
      stem.setStyle(style);
    }
  }, {
    key: "getStemStyle",
    value: function getStemStyle() {
      return this.stem.getStyle();
    }
  }, {
    key: "setLedgerLineStyle",
    value: function setLedgerLineStyle(style) {
      this.ledgerLineStyle = style;
    }
  }, {
    key: "getLedgerLineStyle",
    value: function getLedgerLineStyle() {
      return this.ledgerLineStyle;
    }
  }, {
    key: "setFlagStyle",
    value: function setFlagStyle(style) {
      this.flagStyle = style;
    }
  }, {
    key: "getFlagStyle",
    value: function getFlagStyle() {
      return this.flagStyle;
    } // Sets the notehead at `index` to the provided coloring `style`.
    //
    // `style` is an `object` with the following properties: `shadowColor`,
    // `shadowBlur`, `fillStyle`, `strokeStyle`

  }, {
    key: "setKeyStyle",
    value: function setKeyStyle(index, style) {
      this.note_heads[index].setStyle(style);
      return this;
    }
  }, {
    key: "setKeyLine",
    value: function setKeyLine(index, line) {
      this.keyProps[index].line = line;
      this.reset();
      return this;
    }
  }, {
    key: "getKeyLine",
    value: function getKeyLine(index) {
      return this.keyProps[index].line;
    } // Add self to modifier context. `mContext` is the `ModifierContext`
    // to be added to.

  }, {
    key: "addToModifierContext",
    value: function addToModifierContext(mContext) {
      this.setModifierContext(mContext);

      for (var i = 0; i < this.modifiers.length; ++i) {
        this.modifierContext.addModifier(this.modifiers[i]);
      }

      this.modifierContext.addModifier(this);
      this.setPreFormatted(false);
      return this;
    } // Generic function to add modifiers to a note
    //
    // Parameters:
    // * `index`: The index of the key that we're modifying
    // * `modifier`: The modifier to add

  }, {
    key: "addModifier",
    value: function addModifier(index, modifier) {
      modifier.setNote(this);
      modifier.setIndex(index);
      this.modifiers.push(modifier);
      this.setPreFormatted(false);
      return this;
    } // Helper function to add an accidental to a key

  }, {
    key: "addAccidental",
    value: function addAccidental(index, accidental) {
      return this.addModifier(index, accidental);
    } // Helper function to add an articulation to a key

  }, {
    key: "addArticulation",
    value: function addArticulation(index, articulation) {
      return this.addModifier(index, articulation);
    } // Helper function to add an annotation to a key

  }, {
    key: "addAnnotation",
    value: function addAnnotation(index, annotation) {
      return this.addModifier(index, annotation);
    } // Helper function to add a dot on a specific key

  }, {
    key: "addDot",
    value: function addDot(index) {
      var dot = new _dot__WEBPACK_IMPORTED_MODULE_7__["Dot"]();
      dot.setDotShiftY(this.glyph.dot_shiftY);
      this.dots++;
      return this.addModifier(index, dot);
    } // Convenience method to add dot to all keys in note

  }, {
    key: "addDotToAll",
    value: function addDotToAll() {
      for (var i = 0; i < this.keys.length; ++i) {
        this.addDot(i);
      }

      return this;
    } // Get all accidentals in the `ModifierContext`

  }, {
    key: "getAccidentals",
    value: function getAccidentals() {
      return this.modifierContext.getModifiers('accidentals');
    } // Get all dots in the `ModifierContext`

  }, {
    key: "getDots",
    value: function getDots() {
      return this.modifierContext.getModifiers('dots');
    } // Get the width of the note if it is displaced. Used for `Voice`
    // formatting

  }, {
    key: "getVoiceShiftWidth",
    value: function getVoiceShiftWidth() {
      // TODO: may need to accomodate 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.

  }, {
    key: "calcNoteDisplacements",
    value: function 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

  }, {
    key: "preFormat",
    value: function preFormat() {
      if (this.preFormatted) return;
      if (this.modifierContext) this.modifierContext.preFormat();
      var width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx; // For upward flagged notes, the width of the flag needs to be added

      if (this.glyph.flag && this.beam === null && 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.setPreFormatted(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}
     */

  }, {
    key: "getNoteHeadBounds",
    value: function getNoteHeadBounds() {
      // Top and bottom Y values for stem.
      var yTop = null;
      var yBottom = null;
      var nonDisplacedX = null;
      var displacedX = null;
      var highestLine = this.stave.getNumLines();
      var lowestLine = 1;
      var highestDisplacedLine = false;
      var lowestDisplacedLine = false;
      var highestNonDisplacedLine = highestLine;
      var lowestNonDisplacedLine = lowestLine;
      this.note_heads.forEach(function (notehead) {
        var line = notehead.getLine();
        var y = notehead.getY();

        if (yTop === null || y < yTop) {
          yTop = y;
        }

        if (yBottom === null || y > yBottom) {
          yBottom = y;
        }

        if (displacedX === null && notehead.isDisplaced()) {
          displacedX = notehead.getAbsoluteX();
        }

        if (nonDisplacedX === null && !notehead.isDisplaced()) {
          nonDisplacedX = notehead.getAbsoluteX();
        }

        highestLine = line > highestLine ? line : highestLine;
        lowestLine = line < lowestLine ? line : lowestLine;

        if (notehead.isDisplaced()) {
          highestDisplacedLine = highestDisplacedLine === false ? line : Math.max(line, highestDisplacedLine);
          lowestDisplacedLine = lowestDisplacedLine === false ? 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

  }, {
    key: "getNoteHeadBeginX",
    value: function getNoteHeadBeginX() {
      return this.getAbsoluteX() + this.x_shift;
    } // Get the ending `x` coordinate for the noteheads

  }, {
    key: "getNoteHeadEndX",
    value: function getNoteHeadEndX() {
      var xBegin = this.getNoteHeadBeginX();
      return xBegin + this.getGlyphWidth();
    } // Draw the ledger lines between the stave and the highest/lowest keys

  }, {
    key: "drawLedgerLines",
    value: function drawLedgerLines() {
      var stave = this.stave,
          glyph = this.glyph,
          stroke_px = this.render_options.stroke_px,
          ctx = this.context;
      var width = glyph.getWidth() + stroke_px * 2;
      var doubleWidth = 2 * (glyph.getWidth() + stroke_px) - _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].WIDTH / 2;
      if (this.isRest()) return;

      if (!ctx) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoCanvasContext', "Can't draw without a canvas context.");
      }

      var _this$getNoteHeadBoun2 = this.getNoteHeadBounds(),
          highest_line = _this$getNoteHeadBoun2.highest_line,
          lowest_line = _this$getNoteHeadBoun2.lowest_line,
          highest_displaced_line = _this$getNoteHeadBoun2.highest_displaced_line,
          highest_non_displaced_line = _this$getNoteHeadBoun2.highest_non_displaced_line,
          lowest_displaced_line = _this$getNoteHeadBoun2.lowest_displaced_line,
          lowest_non_displaced_line = _this$getNoteHeadBoun2.lowest_non_displaced_line,
          displaced_x = _this$getNoteHeadBoun2.displaced_x,
          non_displaced_x = _this$getNoteHeadBoun2.non_displaced_x;

      var min_x = Math.min(displaced_x, non_displaced_x);

      var drawLedgerLine = function drawLedgerLine(y, normal, displaced) {
        var x;
        if (displaced && normal) x = min_x - stroke_px;else if (normal) x = non_displaced_x - stroke_px;else x = displaced_x - stroke_px;
        var ledgerWidth = normal && displaced ? doubleWidth : width;
        ctx.beginPath();
        ctx.moveTo(x, y);
        ctx.lineTo(x + ledgerWidth, y);
        ctx.stroke();
      };

      var style = _objectSpread({}, stave.getStyle() || {}, {}, this.getLedgerLineStyle() || {});

      this.applyStyle(ctx, style); // Draw ledger lines below the staff:

      for (var line = 6; line <= highest_line; ++line) {
        var normal = non_displaced_x !== null && line <= highest_non_displaced_line;
        var displaced = displaced_x !== null && line <= highest_displaced_line;
        drawLedgerLine(stave.getYForNote(line), normal, displaced);
      } // Draw ledger lines above the staff:


      for (var _line = 0; _line >= lowest_line; --_line) {
        var _normal = non_displaced_x !== null && _line >= lowest_non_displaced_line;

        var _displaced = displaced_x !== null && _line >= lowest_displaced_line;

        drawLedgerLine(stave.getYForNote(_line), _normal, _displaced);
      }

      this.restoreStyle(ctx, style);
    } // Draw all key modifiers

  }, {
    key: "drawModifiers",
    value: function drawModifiers() {
      if (!this.context) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoCanvasContext', "Can't draw without a canvas context.");
      }

      var ctx = this.context;
      ctx.openGroup('modifiers');

      for (var i = 0; i < this.modifiers.length; i++) {
        var modifier = this.modifiers[i];
        var notehead = this.note_heads[modifier.getIndex()];
        var noteheadStyle = notehead.getStyle();
        notehead.applyStyle(ctx, noteheadStyle);
        modifier.setContext(ctx);
        modifier.drawWithStyle();
        notehead.restoreStyle(ctx, noteheadStyle);
      }

      ctx.closeGroup();
    } // Draw the flag for the note

  }, {
    key: "drawFlag",
    value: function drawFlag() {
      var stem = this.stem,
          beam = this.beam,
          ctx = this.context;

      if (!ctx) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoCanvasContext', "Can't draw without a canvas context.");
      }

      var shouldRenderFlag = beam === null;
      var glyph = this.getGlyph();

      if (glyph.flag && shouldRenderFlag) {
        var _this$getNoteHeadBoun3 = this.getNoteHeadBounds(),
            y_top = _this$getNoteHeadBoun3.y_top,
            y_bottom = _this$getNoteHeadBoun3.y_bottom;

        var noteStemHeight = stem.getHeight();
        var flagX = this.getStemX(); // FIXME: What's with the magic +/- 2

        var flagY = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].DOWN // Down stems have flags on the left
        ? y_top - noteStemHeight + 2 // Up stems have flags on the eft.
        : y_bottom - noteStemHeight - 2; // Draw the Flag

        ctx.openGroup('flag', null, {
          pointerBBox: true
        });
        this.applyStyle(ctx, this.getFlagStyle() || false);
        this.flag.render(ctx, flagX, flagY);
        this.restoreStyle(ctx, this.getFlagStyle() || false);
        ctx.closeGroup();
      }
    } // Draw the NoteHeads

  }, {
    key: "drawNoteHeads",
    value: function drawNoteHeads() {
      var _this3 = this;

      this.note_heads.forEach(function (notehead) {
        _this3.context.openGroup('notehead', null, {
          pointerBBox: true
        });

        notehead.setContext(_this3.context).draw();

        _this3.context.closeGroup();
      });
    }
  }, {
    key: "drawStem",
    value: function drawStem(stemStruct) {
      // 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?
      if (!this.context) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoCanvasContext', "Can't draw without a canvas context.");
      }

      if (stemStruct) {
        this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"](stemStruct));
      }

      this.context.openGroup('stem', null, {
        pointerBBox: true
      });
      this.stem.setContext(this.context).draw();
      this.context.closeGroup();
    } // Draws all the `StaveNote` parts. This is the main drawing method.

  }, {
    key: "draw",
    value: function draw() {
      if (!this.context) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoCanvasContext', "Can't draw without a canvas context.");
      }

      if (!this.stave) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoStave', "Can't draw without a stave.");
      }

      if (this.ys.length === 0) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoYValues', "Can't draw note without Y values.");
      }

      var xBegin = this.getNoteHeadBeginX();
      var shouldRenderStem = this.hasStem() && !this.beam; // Format note head x positions

      this.note_heads.forEach(function (notehead) {
        return notehead.setX(xBegin);
      }); // Format stem x positions

      var stemX = this.getStemX();
      this.stem.setNoteHeadXBounds(stemX, stemX);
      L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys); // Draw each part of the note

      this.drawLedgerLines(); // Apply the overall style -- may be contradicted by local settings:

      this.applyStyle();
      this.setAttribute('el', this.context.openGroup('stavenote', this.getAttribute('id')));
      this.context.openGroup('note', null, {
        pointerBBox: true
      });
      if (shouldRenderStem) this.drawStem();
      this.drawNoteHeads();
      this.drawFlag();
      this.context.closeGroup();
      this.drawModifiers();
      this.context.closeGroup();
      this.restoreStyle();
      this.setRendered();
    }
  }]);

  return StaveNote;
}(_stemmablenote__WEBPACK_IMPORTED_MODULE_5__["StemmableNote"]);

/***/ }),

/***/ "./src/staverepetition.js":
/*!********************************!*\
  !*** ./src/staverepetition.js ***!
  \********************************/
/*! exports provided: Repetition */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Repetition", function() { return Repetition; });
/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author Larry Kuhns 2011


var Repetition =
/*#__PURE__*/
function (_StaveModifier) {
  _inherits(Repetition, _StaveModifier);

  _createClass(Repetition, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'repetitions';
    }
  }, {
    key: "type",
    get: function get() {
      return {
        NONE: 1,
        // no coda or segno
        CODA_LEFT: 2,
        // coda at beginning of stave
        CODA_RIGHT: 3,
        // coda at end of stave
        SEGNO_LEFT: 4,
        // segno at beginning of stave
        SEGNO_RIGHT: 5,
        // segno at end of stave
        DC: 6,
        // D.C. at end of stave
        DC_AL_CODA: 7,
        // D.C. al coda at end of stave
        DC_AL_FINE: 8,
        // D.C. al Fine end of stave
        DS: 9,
        // D.S. at end of stave
        DS_AL_CODA: 10,
        // D.S. al coda at end of stave
        DS_AL_FINE: 11,
        // D.S. al Fine at end of stave
        FINE: 12 // Fine at end of stave

      };
    }
  }]);

  function Repetition(type, x, y_shift) {
    var _this;

    _classCallCheck(this, Repetition);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Repetition).call(this));

    _this.setAttribute('type', 'Repetition');

    _this.symbol_type = type;
    _this.x = x;
    _this.x_shift = 0;
    _this.y_shift = y_shift;
    _this.font = {
      family: 'times',
      size: 12,
      weight: 'bold italic'
    };
    return _this;
  }

  _createClass(Repetition, [{
    key: "getCategory",
    value: function getCategory() {
      return Repetition.CATEGORY;
    }
  }, {
    key: "setShiftX",
    value: function setShiftX(x) {
      this.x_shift = x;
      return this;
    }
  }, {
    key: "setShiftY",
    value: function setShiftY(y) {
      this.y_shift = y;
      return this;
    }
  }, {
    key: "draw",
    value: function draw(stave, x) {
      this.setRendered();

      switch (this.symbol_type) {
        case Repetition.type.CODA_RIGHT:
          this.drawCodaFixed(stave, x + stave.width);
          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.width);
          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;

        default:
          break;
      }

      return this;
    }
  }, {
    key: "drawCodaFixed",
    value: function drawCodaFixed(stave, x) {
      var y = stave.getYForTopText(stave.options.num_lines) + this.y_shift;
      _glyph__WEBPACK_IMPORTED_MODULE_1__["Glyph"].renderGlyph(stave.context, this.x + x + this.x_shift, y + 25, 40, 'coda', {
        category: 'coda'
      });
      return this;
    }
  }, {
    key: "drawSignoFixed",
    value: function drawSignoFixed(stave, x) {
      var y = stave.getYForTopText(stave.options.num_lines) + this.y_shift;
      _glyph__WEBPACK_IMPORTED_MODULE_1__["Glyph"].renderGlyph(stave.context, this.x + x + this.x_shift, y + 25, 30, 'segno', {
        category: 'segno'
      });
      return this;
    }
  }, {
    key: "drawSymbolText",
    value: function drawSymbolText(stave, x, text, draw_coda) {
      var ctx = stave.checkContext();
      ctx.save();
      ctx.setFont(this.font.family, this.font.size, this.font.weight); // Default to right symbol

      var text_x = 0 + this.x_shift;
      var symbol_x = x + this.x_shift;

      if (this.symbol_type === Repetition.type.CODA_LEFT) {
        // Offset Coda text to right of stave beginning
        text_x = this.x + stave.options.vertical_bar_width;
        symbol_x = text_x + ctx.measureText(text).width + 12;
      } else {
        // Offset Signo text to left stave end
        symbol_x = this.x + x + stave.width - 5 + this.x_shift;
        text_x = symbol_x - +ctx.measureText(text).width - 12;
      }

      var y = stave.getYForTopText(stave.options.num_lines) + this.y_shift;

      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;
    }
  }]);

  return Repetition;
}(_stavemodifier__WEBPACK_IMPORTED_MODULE_0__["StaveModifier"]);

/***/ }),

/***/ "./src/stavesection.js":
/*!*****************************!*\
  !*** ./src/stavesection.js ***!
  \*****************************/
/*! exports provided: StaveSection */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StaveSection", function() { return StaveSection; });
/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author Larry Kuhns 2011

var StaveSection =
/*#__PURE__*/
function (_StaveModifier) {
  _inherits(StaveSection, _StaveModifier);

  _createClass(StaveSection, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'stavesection';
    }
  }]);

  function StaveSection(section, x, shift_y) {
    var _this;

    _classCallCheck(this, StaveSection);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(StaveSection).call(this));

    _this.setAttribute('type', 'StaveSection');

    _this.setWidth(16);

    _this.section = section;
    _this.x = x;
    _this.shift_x = 0;
    _this.shift_y = shift_y;
    _this.font = {
      family: 'sans-serif',
      size: 12,
      weight: 'bold'
    };
    return _this;
  }

  _createClass(StaveSection, [{
    key: "getCategory",
    value: function getCategory() {
      return StaveSection.CATEGORY;
    }
  }, {
    key: "setStaveSection",
    value: function setStaveSection(section) {
      this.section = section;
      return this;
    }
  }, {
    key: "setShiftX",
    value: function setShiftX(x) {
      this.shift_x = x;
      return this;
    }
  }, {
    key: "setShiftY",
    value: function setShiftY(y) {
      this.shift_y = y;
      return this;
    }
  }, {
    key: "draw",
    value: function draw(stave, shift_x) {
      var ctx = stave.checkContext();
      this.setRendered();
      ctx.save();
      ctx.lineWidth = 2;
      ctx.setFont(this.font.family, this.font.size, this.font.weight);
      var text_width = ctx.measureText('' + this.section).width;
      var width = text_width + 6; // add left & right padding

      if (width < 18) width = 18;
      var height = 20; //  Seems to be a good default y

      var y = stave.getYForTopText(3) + this.shift_y;
      var x = this.x + shift_x;
      ctx.beginPath();
      ctx.lineWidth = 2;
      ctx.rect(x, y, width, height);
      ctx.stroke();
      x += (width - text_width) / 2;
      ctx.fillText('' + this.section, x, y + 16);
      ctx.restore();
      return this;
    }
  }]);

  return StaveSection;
}(_stavemodifier__WEBPACK_IMPORTED_MODULE_0__["StaveModifier"]);

/***/ }),

/***/ "./src/stavetempo.js":
/*!***************************!*\
  !*** ./src/stavetempo.js ***!
  \***************************/
/*! exports provided: StaveTempo */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StaveTempo", function() { return StaveTempo; });
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author Radosaw Eichler 2012




var StaveTempo =
/*#__PURE__*/
function (_StaveModifier) {
  _inherits(StaveTempo, _StaveModifier);

  _createClass(StaveTempo, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'stavetempo';
    }
  }]);

  function StaveTempo(tempo, x, shift_y) {
    var _this;

    _classCallCheck(this, StaveTempo);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(StaveTempo).call(this));

    _this.setAttribute('type', 'StaveTempo');

    _this.tempo = tempo;
    _this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"].Position.ABOVE;
    _this.x = x;
    _this.shift_x = 10;
    _this.shift_y = shift_y;
    _this.font = {
      family: 'times',
      size: 14,
      weight: 'bold'
    };
    _this.render_options = {
      glyph_font_scale: 30 // font size for note

    };
    return _this;
  }

  _createClass(StaveTempo, [{
    key: "getCategory",
    value: function getCategory() {
      return StaveTempo.CATEGORY;
    }
  }, {
    key: "setTempo",
    value: function setTempo(tempo) {
      this.tempo = tempo;
      return this;
    }
  }, {
    key: "setShiftX",
    value: function setShiftX(x) {
      this.shift_x = x;
      return this;
    }
  }, {
    key: "setShiftY",
    value: function setShiftY(y) {
      this.shift_y = y;
      return this;
    }
  }, {
    key: "draw",
    value: function draw(stave, shift_x) {
      var ctx = stave.checkContext();
      this.setRendered();
      var options = this.render_options; // FIXME: What does the '38' mean? Why 38? Is that supposed to
      // be the default font size for standard notation?

      var scale = options.glyph_font_scale / 38;
      var name = this.tempo.name;
      var duration = this.tempo.duration;
      var dots = this.tempo.dots;
      var bpm = this.tempo.bpm;
      var font = this.font;
      var x = this.x + this.shift_x + shift_x;
      var y = stave.getYForTopText(1) + this.shift_y;
      ctx.save();

      if (name) {
        ctx.setFont(font.family, font.size, font.weight);
        ctx.fillText(name, x, y);
        x += ctx.measureText(name).width;
      }

      if (duration && bpm) {
        ctx.setFont(font.family, font.size, 'normal');

        if (name) {
          x += ctx.measureText(' ').width;
          ctx.fillText('(', x, y);
          x += ctx.measureText('(').width;
        }

        var code = _tables__WEBPACK_IMPORTED_MODULE_0__["Flow"].getGlyphProps(duration);
        x += 3 * scale;
        _glyph__WEBPACK_IMPORTED_MODULE_3__["Glyph"].renderGlyph(ctx, x, y, options.glyph_font_scale, code.code_head);
        x += code.getWidth() * scale; // Draw stem and flags

        if (code.stem) {
          var stem_height = 30;
          if (code.beam_count) stem_height += 3 * (code.beam_count - 1);
          stem_height *= scale;
          var y_top = y - stem_height;
          ctx.fillRect(x - scale, y_top, scale, stem_height);

          if (code.flag) {
            _glyph__WEBPACK_IMPORTED_MODULE_3__["Glyph"].renderGlyph(ctx, x, y_top, options.glyph_font_scale, code.code_flag_upstem, {
              category: 'flag.staveTempo'
            });
            if (!dots) x += 6 * scale;
          }
        } // Draw dot


        for (var 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;
    }
  }]);

  return StaveTempo;
}(_stavemodifier__WEBPACK_IMPORTED_MODULE_2__["StaveModifier"]);

/***/ }),

/***/ "./src/stavetext.js":
/*!**************************!*\
  !*** ./src/stavetext.js ***!
  \**************************/
/*! exports provided: StaveText */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StaveText", function() { return StaveText; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.js");
/* harmony import */ var _textnote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./textnote */ "./src/textnote.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author Taehoon Moon 2014



var StaveText =
/*#__PURE__*/
function (_StaveModifier) {
  _inherits(StaveText, _StaveModifier);

  _createClass(StaveText, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'stavetext';
    }
  }]);

  function StaveText(text, position, options) {
    var _this;

    _classCallCheck(this, StaveText);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(StaveText).call(this));

    _this.setAttribute('type', 'StaveText');

    _this.setWidth(16);

    _this.text = text;
    _this.position = position;
    _this.options = {
      shift_x: 0,
      shift_y: 0,
      justification: _textnote__WEBPACK_IMPORTED_MODULE_2__["TextNote"].Justification.CENTER
    };
    _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(_this.options, options);
    _this.font = {
      family: 'times',
      size: 16,
      weight: 'normal'
    };
    return _this;
  }

  _createClass(StaveText, [{
    key: "getCategory",
    value: function getCategory() {
      return StaveText.CATEGORY;
    }
  }, {
    key: "setStaveText",
    value: function setStaveText(text) {
      this.text = text;
      return this;
    }
  }, {
    key: "setShiftX",
    value: function setShiftX(x) {
      this.shift_x = x;
      return this;
    }
  }, {
    key: "setShiftY",
    value: function setShiftY(y) {
      this.shift_y = y;
      return this;
    }
  }, {
    key: "setFont",
    value: function setFont(font) {
      _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(this.font, font);
    }
  }, {
    key: "setText",
    value: function setText(text) {
      this.text = text;
    }
  }, {
    key: "draw",
    value: function draw(stave) {
      var ctx = stave.checkContext();
      this.setRendered();
      ctx.save();
      ctx.lineWidth = 2;
      ctx.setFont(this.font.family, this.font.size, this.font.weight);
      var text_width = ctx.measureText('' + this.text).width;
      var x;
      var y;
      var Position = _stavemodifier__WEBPACK_IMPORTED_MODULE_1__["StaveModifier"].Position;
      var Justification = _textnote__WEBPACK_IMPORTED_MODULE_2__["TextNote"].Justification;

      switch (this.position) {
        case Position.LEFT:
        case Position.RIGHT:
          y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;

          if (this.position === Position.LEFT) {
            x = stave.getX() - text_width - 24 + this.options.shift_x;
          } else {
            x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;
          }

          break;

        case Position.ABOVE:
        case Position.BELOW:
          x = stave.getX() + this.options.shift_x;

          if (this.options.justification === Justification.CENTER) {
            x += stave.getWidth() / 2 - text_width / 2;
          } else if (this.options.justification === Justification.RIGHT) {
            x += stave.getWidth() - text_width;
          }

          if (this.position === Position.ABOVE) {
            y = stave.getYForTopText(2) + this.options.shift_y;
          } else {
            y = stave.getYForBottomText(2) + this.options.shift_y;
          }

          break;

        default:
          throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('InvalidPosition', 'Value Must be in Modifier.Position.');
      }

      ctx.fillText('' + this.text, x, y + 4);
      ctx.restore();
      return this;
    }
  }]);

  return StaveText;
}(_stavemodifier__WEBPACK_IMPORTED_MODULE_1__["StaveModifier"]);

/***/ }),

/***/ "./src/stavetie.js":
/*!*************************!*\
  !*** ./src/stavetie.js ***!
  \*************************/
/*! exports provided: StaveTie */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StaveTie", function() { return StaveTie; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://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.


var StaveTie =
/*#__PURE__*/
function (_Element) {
  _inherits(StaveTie, _Element);

  function StaveTie(notes, text) {
    var _this;

    _classCallCheck(this, StaveTie);

    /**
     * Notes is a struct that has:
     *
     *  {
     *    first_note: Note,
     *    last_note: Note,
     *    first_indices: [n1, n2, n3],
     *    last_indices: [n1, n2, n3]
     *  }
     *
     **/
    _this = _possibleConstructorReturn(this, _getPrototypeOf(StaveTie).call(this));

    _this.setAttribute('type', 'StaveTie');

    _this.notes = notes;
    _this.context = null;
    _this.text = text;
    _this.direction = null;
    _this.render_options = {
      cp1: 8,
      // Curve control point 1
      cp2: 12,
      // Curve control point 2
      text_shift_x: 0,
      first_x_shift: 0,
      last_x_shift: 0,
      y_shift: 7,
      tie_spacing: 0,
      font: {
        family: 'Arial',
        size: 10,
        style: ''
      }
    };
    _this.font = _this.render_options.font;

    _this.setNotes(notes);

    return _this;
  }

  _createClass(StaveTie, [{
    key: "setFont",
    value: function setFont(font) {
      this.font = font;
      return this;
    }
  }, {
    key: "setDirection",
    value: function setDirection(direction) {
      this.direction = direction;
      return this;
    }
    /**
     * Set the notes to attach this tie to.
     *
     * @param {!Object} notes The notes to tie up.
     */

  }, {
    key: "setNotes",
    value: function setNotes(notes) {
      if (!notes.first_note && !notes.last_note) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].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 _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', 'Tied notes must have similar index sizes');
      } // Success. Lets grab 'em 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;
    }
    /**
     * @return {boolean} Returns true if this is a partial bar.
     */

  }, {
    key: "isPartial",
    value: function isPartial() {
      return !this.first_note || !this.last_note;
    }
  }, {
    key: "renderTie",
    value: function renderTie(params) {
      if (params.first_ys.length === 0 || params.last_ys.length === 0) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', 'No Y-values to render');
      }

      var ctx = this.context;
      var cp1 = this.render_options.cp1;
      var cp2 = this.render_options.cp2;

      if (Math.abs(params.last_x_px - params.first_x_px) < 10) {
        cp1 = 2;
        cp2 = 8;
      }

      var first_x_shift = this.render_options.first_x_shift;
      var last_x_shift = this.render_options.last_x_shift;
      var y_shift = this.render_options.y_shift * params.direction;

      for (var i = 0; i < this.first_indices.length; ++i) {
        var cp_x = (params.last_x_px + last_x_shift + (params.first_x_px + first_x_shift)) / 2;
        var first_y_px = params.first_ys[this.first_indices[i]] + y_shift;
        var last_y_px = params.last_ys[this.last_indices[i]] + y_shift;

        if (isNaN(first_y_px) || isNaN(last_y_px)) {
          throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', 'Bad indices for tie rendering.');
        }

        var top_cp_y = (first_y_px + last_y_px) / 2 + cp1 * params.direction;
        var 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();
      }
    }
  }, {
    key: "renderText",
    value: function renderText(first_x_px, last_x_px) {
      if (!this.text) return;
      var center_x = (first_x_px + last_x_px) / 2;
      center_x -= this.context.measureText(this.text).width / 2;
      this.context.save();
      this.context.setFont(this.font.family, this.font.size, this.font.style);
      this.context.fillText(this.text, center_x + this.render_options.text_shift_x, (this.first_note || this.last_note).getStave().getYForTopText() - 1);
      this.context.restore();
    }
  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();
      this.setRendered();
      var first_note = this.first_note;
      var last_note = this.last_note;
      var first_x_px;
      var last_x_px;
      var first_ys;
      var last_ys;
      var stem_direction;

      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 {
        first_x_px = last_note.getStave().getTieStartX();
        first_ys = last_note.getYs();
        this.first_indices = this.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 {
        last_x_px = first_note.getStave().getTieEndX();
        last_ys = first_note.getYs();
        this.last_indices = this.first_indices;
      }

      if (this.direction) {
        stem_direction = this.direction;
      }

      this.renderTie({
        first_x_px: first_x_px,
        last_x_px: last_x_px,
        first_ys: first_ys,
        last_ys: last_ys,
        direction: stem_direction
      });
      this.renderText(first_x_px, last_x_px);
      return true;
    }
  }]);

  return StaveTie;
}(_element__WEBPACK_IMPORTED_MODULE_1__["Element"]);

/***/ }),

/***/ "./src/stavevolta.js":
/*!***************************!*\
  !*** ./src/stavevolta.js ***!
  \***************************/
/*! exports provided: Volta */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Volta", function() { return Volta; });
/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author Larry Kuhns 2011

var Volta =
/*#__PURE__*/
function (_StaveModifier) {
  _inherits(Volta, _StaveModifier);

  _createClass(Volta, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'voltas';
    }
  }, {
    key: "type",
    get: function get() {
      return {
        NONE: 1,
        BEGIN: 2,
        MID: 3,
        END: 4,
        BEGIN_END: 5
      };
    }
  }]);

  function Volta(type, number, x, y_shift) {
    var _this;

    _classCallCheck(this, Volta);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Volta).call(this));

    _this.setAttribute('type', 'Volta');

    _this.volta = type;
    _this.x = x;
    _this.y_shift = y_shift;
    _this.number = number;
    _this.font = {
      family: 'sans-serif',
      size: 9,
      weight: 'bold'
    };
    return _this;
  }

  _createClass(Volta, [{
    key: "getCategory",
    value: function getCategory() {
      return Volta.CATEGORY;
    }
  }, {
    key: "setShiftY",
    value: function setShiftY(y) {
      this.y_shift = y;
      return this;
    }
  }, {
    key: "draw",
    value: function draw(stave, x) {
      var ctx = stave.checkContext();
      this.setRendered();
      var width = stave.width;
      var top_y = stave.getYForTopText(stave.options.num_lines) + this.y_shift;
      var vert_height = 1.5 * stave.options.spacing_between_lines_px;

      switch (this.volta) {
        case Volta.type.BEGIN:
          ctx.fillRect(this.x + x, top_y, 1, vert_height);
          break;

        case Volta.type.END:
          width -= 5;
          ctx.fillRect(this.x + x + width, top_y, 1, vert_height);
          break;

        case Volta.type.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 === Volta.type.BEGIN || this.volta === Volta.type.BEGIN_END) {
        ctx.save();
        ctx.setFont(this.font.family, this.font.size, this.font.weight);
        ctx.fillText(this.number, this.x + x + 5, top_y + 15);
        ctx.restore();
      }

      ctx.fillRect(this.x + x, top_y, width, 1);
      return this;
    }
  }]);

  return Volta;
}(_stavemodifier__WEBPACK_IMPORTED_MODULE_0__["StaveModifier"]);

/***/ }),

/***/ "./src/stem.js":
/*!*********************!*\
  !*** ./src/stem.js ***!
  \*********************/
/*! exports provided: Stem */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Stem", function() { return Stem; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// This file implements the `Stem` object. Generally this object is handled
// by its parent `StemmableNote`.


 // To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (Stem.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.Stem', args);
}

var Stem =
/*#__PURE__*/
function (_Element) {
  _inherits(Stem, _Element);

  _createClass(Stem, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'stem';
    } // Stem directions

  }, {
    key: "UP",
    get: function get() {
      return 1;
    }
  }, {
    key: "DOWN",
    get: function get() {
      return -1;
    } // Theme

  }, {
    key: "WIDTH",
    get: function get() {
      return _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].STEM_WIDTH;
    }
  }, {
    key: "HEIGHT",
    get: function get() {
      return _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].STEM_HEIGHT;
    }
  }]);

  function Stem() {
    var _this;

    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _classCallCheck(this, Stem);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Stem).call(this));

    _this.setAttribute('type', 'Stem'); // Default notehead x bounds


    _this.x_begin = options.x_begin || 0;
    _this.x_end = options.x_end || 0; // Y bounds for top/bottom most notehead

    _this.y_top = options.y_top || 0;
    _this.y_bottom = options.y_bottom || 0; // Stem top extension

    _this.stem_extension = options.stem_extension || 0; // Direction of the stem

    _this.stem_direction = options.stem_direction || 0; // Flag to override all draw calls

    _this.hide = options.hide || false;
    _this.isStemlet = options.isStemlet || false;
    _this.stemletHeight = options.stemletHeight || 0; // Use to adjust the rendered height without affecting
    // the results of `.getExtents()`

    _this.renderHeightAdjustment = 0;

    _this.setOptions(options);

    return _this;
  }

  _createClass(Stem, [{
    key: "setOptions",
    value: function setOptions(options) {
      // Changing where the stem meets the head
      this.stem_up_y_offset = options.stem_up_y_offset || 0;
      this.stem_down_y_offset = options.stem_down_y_offset || 0;
      this.stem_up_y_base_offset = options.stem_up_y_base_offset || 0;
      this.stem_down_y_base_offset = options.stem_down_y_base_offset || 0;
    } // Set the x bounds for the default notehead

  }, {
    key: "setNoteHeadXBounds",
    value: function 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

  }, {
    key: "setDirection",
    value: function setDirection(direction) {
      this.stem_direction = direction;
    } // Set the extension for the stem, generally for flags or beams

  }, {
    key: "setExtension",
    value: function setExtension(ext) {
      this.stem_extension = ext;
    }
  }, {
    key: "getExtension",
    value: function getExtension() {
      return this.stem_extension;
    } // The the y bounds for the top and bottom noteheads

  }, {
    key: "setYBounds",
    value: function setYBounds(y_top, y_bottom) {
      this.y_top = y_top;
      this.y_bottom = y_bottom;
    } // The category of the object

  }, {
    key: "getCategory",
    value: function getCategory() {
      return Stem.CATEGORY;
    } // Gets the entire height for the stem

  }, {
    key: "getHeight",
    value: function getHeight() {
      var y_offset = this.stem_direction === Stem.UP ? this.stem_up_y_offset : this.stem_down_y_offset; // eslint-disable-line max-len

      return (this.y_bottom - this.y_top) * this.stem_direction + (Stem.HEIGHT - y_offset + this.stem_extension) * this.stem_direction;
    }
  }, {
    key: "getBoundingBox",
    value: function getBoundingBox() {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NotImplemented', 'getBoundingBox() not implemented.');
    } // Get the y coordinates for the very base of the stem to the top of
    // the extension

  }, {
    key: "getExtents",
    value: function getExtents() {
      var isStemUp = this.stem_direction === Stem.UP;
      var ys = [this.y_top, this.y_bottom];
      var stemHeight = Stem.HEIGHT + this.stem_extension;
      var innerMostNoteheadY = (isStemUp ? Math.min : Math.max).apply(void 0, ys);
      var outerMostNoteheadY = (isStemUp ? Math.max : Math.min).apply(void 0, ys);
      var stemTipY = innerMostNoteheadY + stemHeight * -this.stem_direction;
      return {
        topY: stemTipY,
        baseY: outerMostNoteheadY
      };
    }
  }, {
    key: "setVisibility",
    value: function setVisibility(isVisible) {
      this.hide = !isVisible;
      return this;
    }
  }, {
    key: "setStemlet",
    value: function setStemlet(isStemlet, stemletHeight) {
      this.isStemlet = isStemlet;
      this.stemletHeight = stemletHeight;
      return this;
    } // Render the stem onto the canvas

  }, {
    key: "draw",
    value: function draw() {
      this.setRendered();
      if (this.hide) return;
      var ctx = this.checkContext();
      var stem_x;
      var stem_y;
      var stem_direction = this.stem_direction;
      var 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;
      }

      var 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

      var stemletYOffset = this.isStemlet ? stemHeight - this.stemletHeight * this.stem_direction : 0; // Draw the stem

      ctx.save();
      this.applyStyle(ctx);
      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();
      this.restoreStyle(ctx);
      ctx.restore();
    }
  }]);

  return Stem;
}(_element__WEBPACK_IMPORTED_MODULE_1__["Element"]);

/***/ }),

/***/ "./src/stemmablenote.js":
/*!******************************!*\
  !*** ./src/stemmablenote.js ***!
  \******************************/
/*! exports provided: StemmableNote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StemmableNote", function() { return StemmableNote; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stem */ "./src/stem.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./note */ "./src/note.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://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`





var StemmableNote =
/*#__PURE__*/
function (_Note) {
  _inherits(StemmableNote, _Note);

  function StemmableNote(note_struct) {
    var _this;

    _classCallCheck(this, StemmableNote);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(StemmableNote).call(this, note_struct));

    _this.setAttribute('type', 'StemmableNote');

    _this.stem = null;
    _this.stemExtensionOverride = null;
    _this.beam = null;
    return _this;
  } // Get and set the note's `Stem`


  _createClass(StemmableNote, [{
    key: "getStem",
    value: function getStem() {
      return this.stem;
    }
  }, {
    key: "setStem",
    value: function setStem(stem) {
      this.stem = stem;
      return this;
    } // Builds and sets a new stem

  }, {
    key: "buildStem",
    value: function buildStem() {
      var stem = new _stem__WEBPACK_IMPORTED_MODULE_2__["Stem"]();
      this.setStem(stem);
      return this;
    }
  }, {
    key: "buildFlag",
    value: function buildFlag() {
      var category = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'flag';
      var glyph = this.glyph,
          beam = this.beam;
      var shouldRenderFlag = beam === null;

      if (glyph && glyph.flag && shouldRenderFlag) {
        var flagCode = this.getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_2__["Stem"].DOWN ? glyph.code_flag_downstem : glyph.code_flag_upstem;
        this.flag = new _glyph__WEBPACK_IMPORTED_MODULE_3__["Glyph"](flagCode, this.render_options.glyph_font_scale, {
          category: category
        });
      }
    } // Get the custom glyph associated with the outer note head on the base of the stem.

  }, {
    key: "getBaseCustomNoteHeadGlyph",
    value: function getBaseCustomNoteHeadGlyph() {
      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

  }, {
    key: "getStemLength",
    value: function getStemLength() {
      return _stem__WEBPACK_IMPORTED_MODULE_2__["Stem"].HEIGHT + this.getStemExtension();
    } // Get the number of beams for this duration

  }, {
    key: "getBeamCount",
    value: function getBeamCount() {
      var glyph = this.getGlyph();

      if (glyph) {
        return glyph.beam_count;
      } else {
        return 0;
      }
    } // Get the minimum length of stem

  }, {
    key: "getStemMinumumLength",
    value: function getStemMinumumLength() {
      var frac = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].durationToFraction(this.duration);
      var length = frac.value() <= 1 ? 0 : 20; // if note is flagged, cannot shorten beam

      switch (this.duration) {
        case '8':
          if (this.beam == null) length = 35;
          break;

        case '16':
          length = this.beam == null ? 35 : 25;
          break;

        case '32':
          length = this.beam == null ? 45 : 35;
          break;

        case '64':
          length = this.beam == null ? 50 : 40;
          break;

        case '128':
          length = this.beam == null ? 55 : 45;
          break;

        default:
          break;
      }

      return length;
    } // Get/set the direction of the stem

  }, {
    key: "getStemDirection",
    value: function getStemDirection() {
      return this.stem_direction;
    }
  }, {
    key: "setStemDirection",
    value: function 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 _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArgument', "Invalid stem direction: ".concat(direction));
      }

      this.stem_direction = direction;

      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.

        var glyph = this.getBaseCustomNoteHeadGlyph() || this.getGlyph(); // Get the font-specific customizations for the note heads.

        var offsets = this.musicFont.lookupMetric("stem.noteHead.".concat(glyph.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,
          // glyph.stem_up_y_offset,
          stem_down_y_offset: offsets.offsetYTopStemDown,
          // glyph.stem_down_y_offset,
          stem_up_y_base_offset: offsets.offsetYBaseStemUp,
          // glyph.stem_up_y_base_offset,
          stem_down_y_base_offset: offsets.offsetYBaseStemDown // glyph.stem_down_y_base_offset,

        });
      } // Reset and reformat everything.


      this.reset();

      if (this.flag) {
        this.buildFlag();
      }

      this.beam = null;

      if (this.preFormatted) {
        this.preFormat();
      }

      return this;
    } // Get the `x` coordinate of the stem

  }, {
    key: "getStemX",
    value: function getStemX() {
      var x_begin = this.getAbsoluteX() + this.x_shift;
      var x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();
      var 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

  }, {
    key: "getCenterGlyphX",
    value: function getCenterGlyphX() {
      return this.getAbsoluteX() + this.x_shift + this.getGlyphWidth() / 2;
    } // Get the stem extension for the current duration

  }, {
    key: "getStemExtension",
    value: function getStemExtension() {
      var glyph = this.getGlyph();

      if (this.stemExtensionOverride != null) {
        return this.stemExtensionOverride;
      }

      if (glyph) {
        return this.getStemDirection() === 1 ? glyph.stem_up_extension : glyph.stem_down_extension;
      }

      return 0;
    } // Set the stem length to a specific. Will override the default length.

  }, {
    key: "setStemLength",
    value: function setStemLength(height) {
      this.stemExtensionOverride = height - _stem__WEBPACK_IMPORTED_MODULE_2__["Stem"].HEIGHT;
      return this;
    } // Get the top and bottom `y` values of the stem.

  }, {
    key: "getStemExtents",
    value: function getStemExtents() {
      return this.stem.getExtents();
    } // Sets the current note's beam

  }, {
    key: "setBeam",
    value: function setBeam(beam) {
      this.beam = beam;
      return this;
    } // Get the `y` value for the top/bottom modifiers at a specific `textLine`

  }, {
    key: "getYForTopText",
    value: function getYForTopText(textLine) {
      var extents = this.getStemExtents();

      if (this.hasStem()) {
        return Math.min(this.stave.getYForTopText(textLine), extents.topY - this.render_options.annotation_spacing * (textLine + 1));
      } else {
        return this.stave.getYForTopText(textLine);
      }
    }
  }, {
    key: "getYForBottomText",
    value: function getYForBottomText(textLine) {
      var extents = this.getStemExtents();

      if (this.hasStem()) {
        return Math.max(this.stave.getYForTopText(textLine), extents.baseY + this.render_options.annotation_spacing * textLine);
      } else {
        return this.stave.getYForBottomText(textLine);
      }
    }
  }, {
    key: "hasFlag",
    value: function hasFlag() {
      return _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].getGlyphProps(this.duration).flag && !this.beam;
    } // Post format the note

  }, {
    key: "postFormat",
    value: function postFormat() {
      if (this.beam) this.beam.postFormat();
      this.postFormatted = true;
      return this;
    } // Render the stem onto the canvas

  }, {
    key: "drawStem",
    value: function drawStem(stem_struct) {
      this.checkContext();
      this.setRendered();
      this.setStem(new _stem__WEBPACK_IMPORTED_MODULE_2__["Stem"](stem_struct));
      this.stem.setContext(this.context).draw();
    }
  }]);

  return StemmableNote;
}(_note__WEBPACK_IMPORTED_MODULE_4__["Note"]);

/***/ }),

/***/ "./src/stringnumber.js":
/*!*****************************!*\
  !*** ./src/stringnumber.js ***!
  \*****************************/
/*! exports provided: StringNumber */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StringNumber", function() { return StringNumber; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./renderer */ "./src/renderer.js");
/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author: Larry Kuhns
//
// ## Description
// This file implements the `StringNumber` class which renders string
// number annotations beside notes.




var StringNumber =
/*#__PURE__*/
function (_Modifier) {
  _inherits(StringNumber, _Modifier);

  _createClass(StringNumber, null, [{
    key: "format",
    // ## Static Methods
    // Arrange string numbers inside a `ModifierContext`
    value: function format(nums, state) {
      var left_shift = state.left_shift;
      var right_shift = state.right_shift;
      var num_spacing = 1;
      if (!nums || nums.length === 0) return this;
      var nums_list = [];
      var prev_note = null;
      var shift_left = 0;
      var shift_right = 0;
      var i;
      var num;
      var note;
      var pos;

      for (i = 0; i < nums.length; ++i) {
        num = nums[i];
        note = num.getNote();

        for (i = 0; i < nums.length; ++i) {
          num = nums[i];
          note = num.getNote();
          pos = num.getPosition();
          var props = note.getKeyProps()[num.getIndex()];

          if (note !== prev_note) {
            for (var 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;
          }

          nums_list.push({
            pos: pos,
            note: note,
            num: num,
            line: props.line,
            shiftL: shift_left,
            shiftR: shift_right
          });
        }
      } // Sort string numbers by line number.


      nums_list.sort(function (a, b) {
        return b.line - a.line;
      }); // TODO: This variable never gets assigned to anything. Is that a bug or can this be removed?

      var num_shiftL = 0; // eslint-disable-line

      var num_shiftR = 0;
      var x_widthL = 0;
      var x_widthR = 0;
      var last_line = null;
      var last_note = null;

      for (i = 0; i < nums_list.length; ++i) {
        var num_shift = 0;
        note = nums_list[i].note;
        pos = nums_list[i].pos;
        num = nums_list[i].num;
        var line = nums_list[i].line;
        var shiftL = nums_list[i].shiftL;
        var shiftR = nums_list[i].shiftR; // Reset the position of the string number every line.

        if (line !== last_line || note !== last_note) {
          num_shiftL = left_shift + shiftL;
          num_shiftR = right_shift + shiftR;
        }

        var 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;
    }
  }, {
    key: "CATEGORY",
    get: function get() {
      return 'stringnumber';
    }
  }]);

  function StringNumber(number) {
    var _this;

    _classCallCheck(this, StringNumber);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(StringNumber).call(this));

    _this.setAttribute('type', 'StringNumber');

    _this.note = null;
    _this.last_note = null;
    _this.index = null;
    _this.string_number = number;

    _this.setWidth(20); // ???


    _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.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.font = {
      family: 'sans-serif',
      size: 10,
      weight: 'bold'
    };
    return _this;
  }

  _createClass(StringNumber, [{
    key: "getCategory",
    value: function getCategory() {
      return StringNumber.CATEGORY;
    }
  }, {
    key: "getNote",
    value: function getNote() {
      return this.note;
    }
  }, {
    key: "setNote",
    value: function setNote(note) {
      this.note = note;
      return this;
    }
  }, {
    key: "getIndex",
    value: function getIndex() {
      return this.index;
    }
  }, {
    key: "setIndex",
    value: function setIndex(index) {
      this.index = index;
      return this;
    }
  }, {
    key: "setLineEndType",
    value: function 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;
    }
  }, {
    key: "setStringNumber",
    value: function setStringNumber(number) {
      this.string_number = number;
      return this;
    }
  }, {
    key: "setOffsetX",
    value: function setOffsetX(x) {
      this.x_offset = x;
      return this;
    }
  }, {
    key: "setOffsetY",
    value: function setOffsetY(y) {
      this.y_offset = y;
      return this;
    }
  }, {
    key: "setLastNote",
    value: function setLastNote(note) {
      this.last_note = note;
      return this;
    }
  }, {
    key: "setDashed",
    value: function setDashed(dashed) {
      this.dashed = dashed;
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      var ctx = this.checkContext();

      if (!(this.note && this.index != null)) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoAttachedNote', "Can't draw string number without a note and index.");
      }

      this.setRendered();
      var line_space = this.note.stave.options.spacing_between_lines_px;
      var start = this.note.getModifierStartXY(this.position, this.index);
      var dot_x = start.x + this.x_shift + this.x_offset;
      var dot_y = start.y + this.y_shift + this.y_offset;

      switch (this.position) {
        case _modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"].Position.ABOVE:
        case _modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"].Position.BELOW:
          {
            var stem_ext = this.note.getStemExtents();
            var top = stem_ext.topY;
            var bottom = stem_ext.baseY + 2;

            if (this.note.stem_direction === _stavenote__WEBPACK_IMPORTED_MODULE_3__["StaveNote"].STEM_DOWN) {
              top = stem_ext.baseY;
              bottom = stem_ext.topY - 2;
            }

            if (this.position === _modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"].Position.ABOVE) {
              dot_y = this.note.hasStem() ? top - line_space * 1.75 : start.y - line_space * 1.75;
            } else {
              dot_y = this.note.hasStem() ? bottom + line_space * 1.5 : start.y + line_space * 1.75;
            }

            dot_y += this.y_shift + this.y_offset;
            break;
          }

        case _modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"].Position.LEFT:
          dot_x -= this.radius / 2 + 5;
          break;

        case _modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"].Position.RIGHT:
          dot_x += this.radius / 2 + 6;
          break;

        default:
          throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('InvalidPosition', "The position ".concat(this.position, " is invalid"));
      }

      ctx.save();
      ctx.beginPath();
      ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);
      ctx.lineWidth = 1.5;
      ctx.stroke();
      ctx.setFont(this.font.family, this.font.size, this.font.weight);
      var x = dot_x - ctx.measureText(this.string_number).width / 2;
      ctx.fillText('' + this.string_number, x, dot_y + 4.5);

      if (this.last_note != null) {
        var end = this.last_note.getStemX() - this.note.getX() + 5;
        ctx.strokeStyle = '#000000';
        ctx.lineCap = 'round';
        ctx.lineWidth = 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]);
        }

        var len;
        var 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();
    }
  }]);

  return StringNumber;
}(_modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"]);

/***/ }),

/***/ "./src/strokes.js":
/*!************************!*\
  !*** ./src/strokes.js ***!
  \************************/
/*! exports provided: Stroke */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Stroke", function() { return Stroke; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
/* harmony import */ var _stavenote__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavenote */ "./src/stavenote.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author: Larry Kuhns
//
// ## Description
// This file implements the `Stroke` class which renders chord strokes
// that can be arpeggiated, brushed, rasquedo, etc.




var Stroke =
/*#__PURE__*/
function (_Modifier) {
  _inherits(Stroke, _Modifier);

  _createClass(Stroke, null, [{
    key: "format",
    // Arrange strokes inside `ModifierContext`
    value: function format(strokes, state) {
      var left_shift = state.left_shift;
      var stroke_spacing = 0;
      if (!strokes || strokes.length === 0) return this;
      var strokeList = strokes.map(function (stroke) {
        var note = stroke.getNote();

        if (note instanceof _stavenote__WEBPACK_IMPORTED_MODULE_2__["StaveNote"]) {
          var line = note.getKeyProps()[stroke.getIndex()].line;
          var shift = note.getLeftDisplacedHeadPx();
          return {
            line: line,
            shift: shift,
            stroke: stroke
          };
        } else {
          var string = note.getPositions()[stroke.getIndex()].str;
          return {
            line: string,
            shift: 0,
            stroke: stroke
          };
        }
      });
      var strokeShift = left_shift; // There can only be one stroke .. if more than one, they overlay each other

      var xShift = strokeList.reduce(function (xShift, _ref) {
        var stroke = _ref.stroke,
            shift = _ref.shift;
        stroke.setXShift(strokeShift + shift);
        return Math.max(stroke.getWidth() + stroke_spacing, xShift);
      }, 0);
      state.left_shift += xShift;
      return true;
    }
  }, {
    key: "CATEGORY",
    get: function get() {
      return 'strokes';
    }
  }, {
    key: "Type",
    get: function get() {
      return {
        BRUSH_DOWN: 1,
        BRUSH_UP: 2,
        ROLL_DOWN: 3,
        // Arpeggiated chord
        ROLL_UP: 4,
        // Arpeggiated chord
        RASQUEDO_DOWN: 5,
        RASQUEDO_UP: 6,
        ARPEGGIO_DIRECTIONLESS: 7 // Arpeggiated chord without upwards or downwards arrow

      };
    }
  }]);

  function Stroke(type, options) {
    var _this;

    _classCallCheck(this, Stroke);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Stroke).call(this));

    _this.setAttribute('type', 'Stroke');

    _this.note = null;
    _this.options = _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge({}, options); // multi voice - span stroke across all voices if true

    _this.all_voices = 'all_voices' in _this.options ? _this.options.all_voices : true; // multi voice - end note of stroke, set in draw()

    _this.note_end = null;
    _this.index = null;
    _this.type = type;
    _this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"].Position.LEFT;
    _this.render_options = {
      font_scale: 38,
      stroke_px: 3,
      stroke_spacing: 10
    };
    _this.font = {
      family: 'serif',
      size: 10,
      weight: 'bold italic'
    };

    _this.setXShift(0);

    _this.setWidth(10);

    return _this;
  }

  _createClass(Stroke, [{
    key: "getCategory",
    value: function getCategory() {
      return Stroke.CATEGORY;
    }
  }, {
    key: "getPosition",
    value: function getPosition() {
      return this.position;
    }
  }, {
    key: "addEndNote",
    value: function addEndNote(note) {
      this.note_end = note;
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();
      this.setRendered();

      if (!(this.note && this.index != null)) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoAttachedNote', "Can't draw stroke without a note and index.");
      }

      var start = this.note.getModifierStartXY(this.position, this.index);
      var ys = this.note.getYs();
      var topY = start.y;
      var botY = start.y;
      var x = start.x - 5;
      var line_space = this.note.stave.options.spacing_between_lines_px;
      var notes = this.getModifierContext().getModifiers(this.note.getCategory());

      for (var i = 0; i < notes.length; i++) {
        ys = notes[i].getYs();

        for (var n = 0; n < ys.length; n++) {
          if (this.note === notes[i] || this.all_voices) {
            topY = _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Min(topY, ys[n]);
            botY = _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Max(botY, ys[n]);
          }
        }
      }

      var arrow;
      var arrow_shift_x;
      var arrow_y;
      var text_shift_x;
      var text_y;

      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 (this.note instanceof _stavenote__WEBPACK_IMPORTED_MODULE_2__["StaveNote"]) {
            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 (this.note instanceof _stavenote__WEBPACK_IMPORTED_MODULE_2__["StaveNote"]) {
            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 _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('InvalidType', "The stroke type ".concat(this.type, " does not exist"));
      }

      var strokeLine = 'straight'; // Draw the stroke

      if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {
        this.context.fillRect(x + this.x_shift, topY, 1, botY - topY);
      } else {
        strokeLine = 'wiggly';

        if (this.note instanceof _stavenote__WEBPACK_IMPORTED_MODULE_2__["StaveNote"]) {
          for (var _i = topY; _i <= botY; _i += line_space) {
            _glyph__WEBPACK_IMPORTED_MODULE_3__["Glyph"].renderGlyph(this.context, x + this.x_shift - 4, _i, this.render_options.font_scale, 'vexWiggleArpeggioUp');
          }
        } else {
          var _i2;

          for (_i2 = topY; _i2 <= botY; _i2 += 10) {
            _glyph__WEBPACK_IMPORTED_MODULE_3__["Glyph"].renderGlyph(this.context, x + this.x_shift - 4, _i2, this.render_options.font_scale, 'vexWiggleArpeggioUp');
          }

          if (this.type === Stroke.Type.RASQUEDO_DOWN) {
            text_y = _i2 + 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_3__["Glyph"].renderGlyph(this.context, x + this.x_shift + arrow_shift_x, arrow_y, this.render_options.font_scale, arrow, {
        category: "stroke.".concat(arrow, ".").concat(strokeLine)
      }); // Draw the rasquedo "R"

      if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {
        this.context.save();
        this.context.setFont(this.font.family, this.font.size, this.font.weight);
        this.context.fillText('R', x + text_shift_x, text_y);
        this.context.restore();
      }
    }
  }]);

  return Stroke;
}(_modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"]);

/***/ }),

/***/ "./src/svgcontext.js":
/*!***************************!*\
  !*** ./src/svgcontext.js ***!
  \***************************/
/*! exports provided: SVGContext */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SVGContext", function() { return SVGContext; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// @author Gregory Ristow (2015)

var attrNamesToIgnoreMap = {
  path: {
    x: true,
    y: true,
    width: true,
    height: true
  },
  rect: {},
  text: {
    width: true,
    height: true
  }
};
{
  var fontAttrNamesToIgnore = {
    'font-family': true,
    'font-weight': true,
    'font-style': true,
    'font-size': true
  };
  _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(attrNamesToIgnoreMap.rect, fontAttrNamesToIgnore);
  _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(attrNamesToIgnoreMap.path, fontAttrNamesToIgnore);
}
var SVGContext =
/*#__PURE__*/
function () {
  function SVGContext(element) {
    _classCallCheck(this, SVGContext);

    // element is the parent DOM object
    this.element = element; // Create the SVG in the SVG namespace:

    this.svgNS = 'http://www.w3.org/2000/svg';
    var svg = this.create('svg'); // Add it to the canvas:

    this.element.appendChild(svg); // Point to it:

    this.svg = svg;
    this.groups = [this.svg]; // Create the group stack

    this.parent = this.svg;
    this.path = '';
    this.pen = {
      x: NaN,
      y: NaN
    };
    this.lineWidth = 1.0;
    this.state = {
      scale: {
        x: 1,
        y: 1
      },
      'font-family': 'Arial',
      'font-size': '8pt',
      'font-weight': 'normal'
    };
    this.attributes = {
      'stroke-width': 0.3,
      'fill': 'black',
      'stroke': 'black',
      'stroke-dasharray': 'none',
      'font-family': 'Arial',
      'font-size': '10pt',
      'font-weight': 'normal',
      'font-style': 'normal'
    };
    this.background_attributes = {
      'stroke-width': 0,
      'fill': 'white',
      'stroke': 'white',
      'stroke-dasharray': 'none',
      'font-family': 'Arial',
      'font-size': '10pt',
      'font-weight': 'normal',
      'font-style': 'normal'
    };
    this.shadow_attributes = {
      width: 0,
      color: 'black'
    };
    this.state_stack = []; // Test for Internet Explorer

    this.iePolyfill();
  }

  _createClass(SVGContext, [{
    key: "create",
    value: function create(svgElementType) {
      return document.createElementNS(this.svgNS, svgElementType);
    } // Allow grouping elements in containers for interactivity.

  }, {
    key: "openGroup",
    value: function openGroup(cls, id, attrs) {
      var group = this.create('g');
      this.groups.push(group);
      this.parent.appendChild(group);
      this.parent = group;
      if (cls) group.setAttribute('class', _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Prefix(cls));
      if (id) group.setAttribute('id', _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Prefix(id));

      if (attrs && attrs.pointerBBox) {
        group.setAttribute('pointer-events', 'bounding-box');
      }

      return group;
    }
  }, {
    key: "closeGroup",
    value: function closeGroup() {
      this.groups.pop();
      this.parent = this.groups[this.groups.length - 1];
    }
  }, {
    key: "add",
    value: function add(elem) {
      this.parent.appendChild(elem);
    } // Tests if the browser is Internet Explorer; if it is,
    // we do some tricks to improve text layout.  See the
    // note at ieMeasureTextFix() for details.

  }, {
    key: "iePolyfill",
    value: function iePolyfill() {
      if (typeof navigator !== 'undefined') {
        this.ie = /MSIE 9/i.test(navigator.userAgent) || /MSIE 10/i.test(navigator.userAgent) || /rv:11\.0/i.test(navigator.userAgent) || /Trident/i.test(navigator.userAgent);
      }
    } // ### Styling & State Methods:

  }, {
    key: "setFont",
    value: function setFont(family, size, weight) {
      // Unlike canvas, in SVG italic is handled by font-style,
      // not weight. So: we search the weight argument and
      // apply bold and italic to weight and style respectively.
      var bold = false;
      var italic = false;
      var style = 'normal'; // Weight might also be a number (200, 400, etc...) so we
      // test its type to be sure we have access to String methods.

      if (typeof weight === 'string') {
        // look for "italic" in the weight:
        if (weight.indexOf('italic') !== -1) {
          weight = weight.replace(/italic/g, '');
          italic = true;
        } // look for "bold" in weight


        if (weight.indexOf('bold') !== -1) {
          weight = weight.replace(/bold/g, '');
          bold = true;
        } // remove any remaining spaces


        weight = weight.replace(/ /g, '');
      }

      weight = bold ? 'bold' : weight;
      weight = typeof weight === 'undefined' || weight === '' ? 'normal' : weight;
      style = italic ? 'italic' : style;
      var fontAttributes = {
        'font-family': family,
        'font-size': size + 'pt',
        'font-weight': weight,
        'font-style': style
      }; // Store the font size so that if the browser is Internet
      // Explorer we can fix its calculations of text width.

      this.fontSize = Number(size);
      _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(this.attributes, fontAttributes);
      _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(this.state, fontAttributes);
      return this;
    }
  }, {
    key: "setRawFont",
    value: function setRawFont(font) {
      font = font.trim(); // Assumes size first, splits on space -- which is presently
      // how all existing modules are calling this.

      var fontArray = font.split(' ');
      this.attributes['font-family'] = fontArray[1];
      this.state['font-family'] = fontArray[1];
      this.attributes['font-size'] = fontArray[0];
      this.state['font-size'] = fontArray[0]; // Saves fontSize for IE polyfill

      this.fontSize = Number(fontArray[0].match(/\d+/));
      return this;
    }
  }, {
    key: "setFillStyle",
    value: function setFillStyle(style) {
      this.attributes.fill = style;
      return this;
    }
  }, {
    key: "setBackgroundFillStyle",
    value: function setBackgroundFillStyle(style) {
      this.background_attributes.fill = style;
      this.background_attributes.stroke = style;
      return this;
    }
  }, {
    key: "setStrokeStyle",
    value: function setStrokeStyle(style) {
      this.attributes.stroke = style;
      return this;
    }
  }, {
    key: "setShadowColor",
    value: function setShadowColor(style) {
      this.shadow_attributes.color = style;
      return this;
    }
  }, {
    key: "setShadowBlur",
    value: function setShadowBlur(blur) {
      this.shadow_attributes.width = blur;
      return this;
    }
  }, {
    key: "setLineWidth",
    value: function setLineWidth(width) {
      this.attributes['stroke-width'] = width;
      this.lineWidth = width;
    } // @param array {lineDash} as [dashInt, spaceInt, dashInt, spaceInt, etc...]

  }, {
    key: "setLineDash",
    value: function setLineDash(lineDash) {
      if (Object.prototype.toString.call(lineDash) === '[object Array]') {
        lineDash = lineDash.join(', ');
        this.attributes['stroke-dasharray'] = lineDash;
        return this;
      } else {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('ArgumentError', 'lineDash must be an array of integers.');
      }
    }
  }, {
    key: "setLineCap",
    value: function setLineCap(lineCap) {
      this.attributes['stroke-linecap'] = lineCap;
      return this;
    } // ### Sizing & Scaling Methods:
    // TODO (GCR): See note at scale() -- seperate 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.

  }, {
    key: "resize",
    value: function resize(width, height) {
      this.width = width;
      this.height = height;
      this.element.style.width = width;
      this.svg.style.width = width;
      this.svg.style.height = height;
      var attributes = {
        width: width,
        height: height
      };
      this.applyAttributes(this.svg, attributes);
      this.scale(this.state.scale.x, this.state.scale.y);
      return this;
    }
  }, {
    key: "scale",
    value: function 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 or Raphael 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.scale = {
        x: x,
        y: y
      };
      var visibleWidth = this.width / x;
      var visibleHeight = this.height / y;
      this.setViewBox(0, 0, visibleWidth, visibleHeight);
      return this;
    }
  }, {
    key: "setViewBox",
    value: function setViewBox() {
      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
        args[_key] = arguments[_key];
      }

      // Override for "x y w h" style:
      if (args.length === 1) {
        var viewBox = args[0];
        this.svg.setAttribute('viewBox', viewBox);
      } else {
        var xMin = args[0],
            yMin = args[1],
            width = args[2],
            height = args[3];
        var viewBoxString = xMin + ' ' + yMin + ' ' + width + ' ' + height;
        this.svg.setAttribute('viewBox', viewBoxString);
      }
    } // ### Drawing helper methods:

  }, {
    key: "applyAttributes",
    value: function applyAttributes(element, attributes) {
      var attrNamesToIgnore = attrNamesToIgnoreMap[element.nodeName];
      Object.keys(attributes).forEach(function (propertyName) {
        if (attrNamesToIgnore && attrNamesToIgnore[propertyName]) {
          return;
        }

        element.setAttributeNS(null, propertyName, attributes[propertyName]);
      });
      return element;
    } // ### Shape & Path Methods:

  }, {
    key: "clear",
    value: function 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.scale.x, this.state.scale.y);
    } // ## Rectangles:

  }, {
    key: "rect",
    value: function rect(x, y, width, height, attributes) {
      // Avoid invalid negative height attribs by
      // flipping the rectangle on its head:
      if (height < 0) {
        y += height;
        height *= -1;
      } // Create the rect & style it:


      var rectangle = this.create('rect');

      if (typeof attributes === 'undefined') {
        attributes = {
          fill: 'none',
          'stroke-width': this.lineWidth,
          stroke: 'black'
        };
      }

      _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(attributes, {
        x: x,
        y: y,
        width: width,
        height: height
      });
      this.applyAttributes(rectangle, attributes);
      this.add(rectangle);
      return this;
    }
  }, {
    key: "fillRect",
    value: function fillRect(x, y, width, height) {
      if (height < 0) {
        y += height;
        height *= -1;
      }

      this.rect(x, y, width, height, this.attributes);
      return this;
    }
  }, {
    key: "clearRect",
    value: function clearRect(x, y, width, height) {
      // TODO(GCR): Improve implementation of this...
      // Currently it draws a box of the background color, rather
      // than creating alpha through lower z-levels.
      //
      // See the implementation of this in SVGKit:
      // http://sourceforge.net/projects/svgkit/
      // as a starting point.
      //
      // Adding a large number of transform paths (as we would
      // have to do) could be a real performance hit.  Since
      // tabNote seems to be the only module that makes use of this
      // it may be worth creating a seperate tabStave that would
      // draw lines around locations of tablature fingering.
      //
      this.rect(x, y, width, height, this.background_attributes);
      return this;
    } // ## Paths:

  }, {
    key: "beginPath",
    value: function beginPath() {
      this.path = '';
      this.pen.x = NaN;
      this.pen.y = NaN;
      return this;
    }
  }, {
    key: "moveTo",
    value: function moveTo(x, y) {
      this.path += 'M' + x + ' ' + y;
      this.pen.x = x;
      this.pen.y = y;
      return this;
    }
  }, {
    key: "lineTo",
    value: function lineTo(x, y) {
      this.path += 'L' + x + ' ' + y;
      this.pen.x = x;
      this.pen.y = y;
      return this;
    }
  }, {
    key: "bezierCurveTo",
    value: function bezierCurveTo(x1, y1, x2, y2, x, y) {
      this.path += 'C' + x1 + ' ' + y1 + ',' + x2 + ' ' + y2 + ',' + x + ' ' + y;
      this.pen.x = x;
      this.pen.y = y;
      return this;
    }
  }, {
    key: "quadraticCurveTo",
    value: function quadraticCurveTo(x1, y1, x, y) {
      this.path += 'Q' + x1 + ' ' + y1 + ',' + x + ' ' + y;
      this.pen.x = x;
      this.pen.y = y;
      return this;
    } // This is an attempt (hack) to simulate the HTML5 canvas
    // arc method.

  }, {
    key: "arc",
    value: function arc(x, y, radius, startAngle, endAngle, antiClockwise) {
      function normalizeAngle(angle) {
        while (angle < 0) {
          angle += Math.PI * 2;
        }

        while (angle > Math.PI * 2) {
          angle -= Math.PI * 2;
        }

        return angle;
      }

      startAngle = normalizeAngle(startAngle);
      endAngle = normalizeAngle(endAngle);

      if (startAngle > endAngle) {
        var tmp = startAngle;
        startAngle = endAngle;
        endAngle = tmp;
        antiClockwise = !antiClockwise;
      }

      var delta = endAngle - startAngle;

      if (delta > Math.PI) {
        this.arcHelper(x, y, radius, startAngle, startAngle + delta / 2, antiClockwise);
        this.arcHelper(x, y, radius, startAngle + delta / 2, endAngle, antiClockwise);
      } else {
        this.arcHelper(x, y, radius, startAngle, endAngle, antiClockwise);
      }

      return this;
    }
  }, {
    key: "arcHelper",
    value: function arcHelper(x, y, radius, startAngle, endAngle, antiClockwise) {
      var x1 = x + radius * Math.cos(startAngle);
      var y1 = y + radius * Math.sin(startAngle);
      var x2 = x + radius * Math.cos(endAngle);
      var y2 = y + radius * Math.sin(endAngle);
      var largeArcFlag = 0;
      var sweepFlag = 0;

      if (antiClockwise) {
        sweepFlag = 1;

        if (endAngle - startAngle < Math.PI) {
          largeArcFlag = 1;
        }
      } else if (endAngle - startAngle > Math.PI) {
        largeArcFlag = 1;
      }

      this.path += 'M' + x1 + ' ' + y1 + ' A' + radius + ' ' + radius + ' 0 ' + largeArcFlag + ' ' + sweepFlag + ' ' + x2 + ' ' + y2;

      if (!isNaN(this.pen.x) && !isNaN(this.pen.y)) {
        this.peth += 'M' + this.pen.x + ' ' + this.pen.y;
      }
    }
  }, {
    key: "closePath",
    value: function closePath() {
      this.path += 'Z';
      return this;
    } // Adapted from the source for Raphael's Element.glow

  }, {
    key: "glow",
    value: function glow() {
      // Calculate the width & paths of the glow:
      if (this.shadow_attributes.width > 0) {
        var sa = this.shadow_attributes;
        var num_paths = sa.width / 2; // Stroke at varying widths to create effect of gaussian blur:

        for (var i = 1; i <= num_paths; i++) {
          var attributes = {
            stroke: sa.color,
            'stroke-linejoin': 'round',
            'stroke-linecap': 'round',
            'stroke-width': +(sa.width * 0.4 / num_paths * i).toFixed(3),
            opacity: +((sa.opacity || 0.3) / num_paths).toFixed(3)
          };
          var path = this.create('path');
          attributes.d = this.path;
          this.applyAttributes(path, attributes);
          this.add(path);
        }
      }

      return this;
    }
  }, {
    key: "fill",
    value: function fill(attributes) {
      // If our current path is set to glow, make it glow
      this.glow();
      var path = this.create('path');

      if (typeof attributes === 'undefined') {
        attributes = {};
        _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(attributes, this.attributes);
        attributes.stroke = 'none';
      }

      attributes.d = this.path;
      this.applyAttributes(path, attributes);
      this.add(path);
      return this;
    }
  }, {
    key: "stroke",
    value: function stroke() {
      // If our current path is set to glow, make it glow.
      this.glow();
      var path = this.create('path');
      var attributes = {};
      _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(attributes, this.attributes);
      attributes.fill = 'none';
      attributes['stroke-width'] = this.lineWidth;
      attributes.d = this.path;
      this.applyAttributes(path, attributes);
      this.add(path);
      return this;
    } // ## Text Methods:

  }, {
    key: "measureText",
    value: function measureText(text) {
      var txt = this.create('text');

      if (typeof txt.getBBox !== 'function') {
        return {
          x: 0,
          y: 0,
          width: 0,
          height: 0
        };
      }

      txt.textContent = text;
      this.applyAttributes(txt, this.attributes); // Temporarily add it to the document for measurement.

      this.svg.appendChild(txt);
      var bbox = txt.getBBox();

      if (this.ie && text !== '' && this.attributes['font-style'] === 'italic') {
        bbox = this.ieMeasureTextFix(bbox, text);
      }

      this.svg.removeChild(txt);
      return bbox;
    }
  }, {
    key: "ieMeasureTextFix",
    value: function ieMeasureTextFix(bbox) {
      // Internet Explorer over-pads text in italics,
      // resulting in giant width estimates for measureText.
      // To fix this, we use this formula, tested against
      // ie 11:
      // overestimate (in pixels) = FontSize(in pt) * 1.196 + 1.96
      // And then subtract the overestimate from calculated width.
      var fontSize = Number(this.fontSize);
      var m = 1.196;
      var b = 1.9598;
      var widthCorrection = m * fontSize + b;
      var width = bbox.width - widthCorrection;
      var height = bbox.height - 1.5; // Get non-protected copy:

      var box = {
        x: bbox.x,
        y: bbox.y,
        width: width,
        height: height
      };
      return box;
    }
  }, {
    key: "fillText",
    value: function fillText(text, x, y) {
      if (!text || text.length <= 0) {
        return;
      }

      var attributes = {};
      _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(attributes, this.attributes);
      attributes.stroke = 'none';
      attributes.x = x;
      attributes.y = y;
      var txt = this.create('text');
      txt.textContent = text;
      this.applyAttributes(txt, attributes);
      this.add(txt);
    }
  }, {
    key: "save",
    value: function save() {
      // TODO(mmuthanna): State needs to be deep-copied.
      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;
    }
  }, {
    key: "restore",
    value: function restore() {
      // TODO(0xfe): State needs to be deep-restored.
      var state = this.state_stack.pop();
      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;
    }
  }]);

  return SVGContext;
}();

/***/ }),

/***/ "./src/system.js":
/*!***********************!*\
  !*** ./src/system.js ***!
  \***********************/
/*! exports provided: System */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "System", function() { return System; });
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _factory__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./factory */ "./src/factory.js");
/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatter */ "./src/formatter.js");
/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./note */ "./src/note.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }

function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// This class 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.




var System =
/*#__PURE__*/
function (_Element) {
  _inherits(System, _Element);

  function System() {
    var _this;

    var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

    _classCallCheck(this, System);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(System).call(this));

    _this.setAttribute('type', 'System');

    _this.setOptions(params);

    _this.parts = [];
    return _this;
  }

  _createClass(System, [{
    key: "setOptions",
    value: function setOptions() {
      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
      this.options = _objectSpread({
        x: 10,
        y: 10,
        width: 500,
        connector: null,
        spaceBetweenStaves: 12,
        // stave spaces
        factory: null,
        noJustification: false,
        debugFormatter: false,
        formatIterations: 0,
        // number of formatter tuning steps
        noPadding: false
      }, options, {
        details: _objectSpread({
          alpha: 0.5
        }, options.details)
      });
      this.factory = this.options.factory || new _factory__WEBPACK_IMPORTED_MODULE_1__["Factory"]({
        renderer: {
          el: null
        }
      });
    }
  }, {
    key: "setContext",
    value: function setContext(context) {
      _get(_getPrototypeOf(System.prototype), "setContext", this).call(this, context);

      this.factory.setContext(context);
      return this;
    }
  }, {
    key: "addConnector",
    value: function addConnector() {
      var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'double';
      this.connector = this.factory.StaveConnector({
        top_stave: this.parts[0].stave,
        bottom_stave: this.parts[this.parts.length - 1].stave,
        type: type
      });
      return this.connector;
    }
  }, {
    key: "addStave",
    value: function addStave(params) {
      var _this2 = this;

      params = _objectSpread({
        stave: null,
        voices: [],
        spaceAbove: 0,
        // stave spaces
        spaceBelow: 0,
        // stave spaces
        debugNoteMetrics: false
      }, params, {
        options: _objectSpread({
          left_bar: false
        }, params.options)
      });

      if (!params.stave) {
        params.stave = this.factory.Stave({
          x: this.options.x,
          y: this.options.y,
          width: this.options.width,
          options: params.options
        });
      }

      params.voices.forEach(function (voice) {
        return voice.setContext(_this2.context).setStave(params.stave).getTickables().forEach(function (tickable) {
          return tickable.setStave(params.stave);
        });
      });
      this.parts.push(params);
      return params.stave;
    }
  }, {
    key: "format",
    value: function format() {
      var _this3 = this;

      var formatter = new _formatter__WEBPACK_IMPORTED_MODULE_2__["Formatter"](_objectSpread({}, this.options.details));
      this.formatter = formatter;
      var y = this.options.y;
      var startX = 0;
      var allVoices = [];
      var debugNoteMetricsYs = []; // Join the voices for each stave.

      this.parts.forEach(function (part) {
        y = y + part.stave.space(part.spaceAbove);
        part.stave.setY(y);
        formatter.joinVoices(part.voices);
        y = y + part.stave.space(part.spaceBelow);
        y = y + part.stave.space(_this3.options.spaceBetweenStaves);

        if (part.debugNoteMetrics) {
          debugNoteMetricsYs.push({
            y: y,
            voice: part.voices[0]
          });
          y += 15;
        }

        allVoices = allVoices.concat(part.voices);
        startX = Math.max(startX, part.stave.getNoteStartX());
      }); // Update the start position of all staves.

      this.parts.forEach(function (part) {
        return part.stave.setNoteStartX(startX);
      });
      var justifyWidth = this.options.noPadding ? this.options.width - this.options.x : this.options.width - (startX - this.options.x) - this.musicFont.lookupMetric('stave.padding');
      formatter.format(allVoices, this.options.noJustification ? 0 : justifyWidth);

      for (var i = 0; i < this.options.formatIterations; i++) {
        formatter.tune({
          alpha: this.options.details.alpha
        });
      }

      this.startX = startX;
      this.debugNoteMetricsYs = debugNoteMetricsYs;
      this.lastY = y;
    }
  }, {
    key: "draw",
    value: function draw() {
      // Render debugging information, if requested.
      var ctx = this.checkContext();
      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(function (d) {
        d.voice.getTickables().forEach(function (note) {
          return _note__WEBPACK_IMPORTED_MODULE_3__["Note"].plotMetrics(ctx, note, d.y);
        });
      });
    }
  }]);

  return System;
}(_element__WEBPACK_IMPORTED_MODULE_0__["Element"]);

/***/ }),

/***/ "./src/tables.js":
/*!***********************!*\
  !*** ./src/tables.js ***!
  \***********************/
/*! exports provided: Flow */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Flow", function() { return Flow; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fraction */ "./src/fraction.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
/* harmony import */ var _smufl__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./smufl */ "./src/smufl.js");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.

/* eslint-disable key-spacing */




var Flow = {
  STEM_WIDTH: 1.5,
  STEM_HEIGHT: 35,
  STAVE_LINE_THICKNESS: 1,
  RESOLUTION: 16384,
  DEFAULT_FONT_STACK: _smufl__WEBPACK_IMPORTED_MODULE_3__["DefaultFontStack"],
  DEFAULT_NOTATION_FONT_SCALE: 39,
  DEFAULT_TABLATURE_FONT_SCALE: 39,
  SLASH_NOTEHEAD_WIDTH: 15,
  // 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.
  TEXT_HEIGHT_OFFSET_HACK: 1,

  /* Kerning (DEPRECATED) */
  IsKerned: true
};

Flow.clefProperties = function (clef) {
  if (!clef) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArgument', 'Invalid clef: ' + clef);
  var props = Flow.clefProperties.values[clef];
  if (!props) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArgument', 'Invalid clef: ' + clef);
  return props;
};

Flow.clefProperties.values = {
  '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
  }
};
/*
  Take a note in the format "Key/Octave" (e.g., "C/5") and return properties.

  The last argument, params, is a struct the currently can contain one option,
  octave_shift for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).
*/

Flow.keyProperties = function (key, clef, params) {
  if (clef === undefined) {
    clef = 'treble';
  }

  var options = {
    octave_shift: 0
  };

  if (_typeof(params) === 'object') {
    _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(options, params);
  }

  var pieces = key.split('/');

  if (pieces.length < 2) {
    throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "Key must have note + octave and an optional glyph: ".concat(key));
  }

  var k = pieces[0].toUpperCase();
  var value = Flow.keyProperties.note_values[k];
  if (!value) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', 'Invalid key name: ' + k);
  if (value.octave) pieces[1] = value.octave;
  var octave = parseInt(pieces[1], 10); // Octave_shift is the shift to compensate for clef 8va/8vb.

  octave += -1 * options.octave_shift;
  var base_index = octave * 7 - 4 * 7;
  var line = (base_index + value.index) / 2;
  line += Flow.clefProperties(clef).line_shift;
  var 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.

  var int_value = typeof value.int_val !== 'undefined' ? octave * 12 + value.int_val : null;
  /* Check if the user specified a glyph. */

  var code = value.code;
  var shift_right = value.shift_right;
  var extraProps = {};

  if (pieces.length > 2 && pieces[2]) {
    var glyph_name = pieces[2].toUpperCase();
    extraProps = Flow.keyProperties.customNoteHeads[glyph_name] || {};
  }

  return _objectSpread({
    key: k,
    octave: octave,
    line: line,
    int_value: int_value,
    accidental: value.accidental,
    code: code,
    stroke: stroke,
    shift_right: shift_right,
    displaced: false
  }, extraProps);
};

Flow.keyProperties.note_values = {
  'C': {
    index: 0,
    int_val: 0,
    accidental: null
  },
  '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: -1,
    accidental: 'b'
  },
  'CBB': {
    index: 0,
    int_val: -2,
    accidental: 'bb'
  },
  'D': {
    index: 1,
    int_val: 2,
    accidental: null
  },
  '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,
    accidental: null
  },
  '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,
    accidental: null
  },
  '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,
    accidental: null
  },
  '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,
    accidental: null
  },
  '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,
    accidental: null
  },
  '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,
    int_val: 9,
    rest: true
  },
  // Rest
  'X': {
    index: 6,
    accidental: '',
    octave: 4,
    code: 'noteheadXBlack',
    shift_right: 5.5
  }
};

Flow.integerToNote = function (integer) {
  if (typeof integer === 'undefined') {
    throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', 'Undefined integer for integerToNote');
  }

  if (integer < -2) {
    throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "integerToNote requires integer > -2: ".concat(integer));
  }

  var noteValue = Flow.integerToNote.table[integer];

  if (!noteValue) {
    throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "Unknown note value for integer: ".concat(integer));
  }

  return noteValue;
};

Flow.integerToNote.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'
};

Flow.tabToGlyph = function (fret) {
  var scale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1.0;
  var glyph = null;
  var width = 0;
  var shift_y = 0;

  if (fret.toString().toUpperCase() === 'X') {
    var glyphMetrics = new _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"]('accidentalDoubleSharp', Flow.DEFAULT_TABLATURE_FONT_SCALE).getMetrics();
    glyph = 'accidentalDoubleSharp';
    width = glyphMetrics.width;
    shift_y = -glyphMetrics.height / 2;
  } else {
    width = Flow.textWidth(fret.toString());
  }

  return {
    text: fret,
    code: glyph,
    getWidth: function getWidth() {
      return width * scale;
    },
    shift_y: shift_y
  };
};

Flow.textWidth = function (text) {
  return 7 * text.toString().length;
};

Flow.articulationCodes = function (artic) {
  return Flow.articulationCodes.articulations[artic];
};

Flow.articulationCodes.articulations = {
  'a.': {
    code: 'augmentationDot',
    between_lines: true
  },
  // Staccato
  'av': {
    aboveCode: 'articStaccatissimoAbove',
    belowCode: 'articStaccatissimoBelow',
    between_lines: true
  },
  // Staccatissimo
  'a>': {
    aboveCode: 'articAccentAbove',
    belowCode: 'articAccentBelow',
    between_lines: true
  },
  // Accent
  'a-': {
    aboveCode: 'articTenutoAbove',
    belowCode: 'articTenutoBelow',
    between_lines: true
  },
  // Tenuto
  'a^': {
    aboveCode: 'articMarcatoAbove',
    belowCode: 'articMarcatoBelow',
    between_lines: false
  },
  // Marcato
  'a+': {
    code: 'pluckedLeftHandPizzicato',
    between_lines: false
  },
  // Left hand pizzicato
  'ao': {
    aboveCode: 'pluckedSnapPizzicatoAbove',
    belowCode: 'pluckedSnapPizzicatoBelow',
    between_lines: false
  },
  // Snap pizzicato
  'ah': {
    code: 'stringsHarmonic',
    between_lines: false
  },
  // Natural harmonic or open note
  'a@': {
    aboveCode: 'fermataAbove',
    belowCode: 'fermataBelow',
    between_lines: false
  },
  // Fermata
  'a@a': {
    code: 'fermataAbove',
    between_lines: false
  },
  // Fermata above staff
  'a@u': {
    code: 'fermataBelow',
    between_lines: false
  },
  // Fermata below staff
  'a|': {
    code: 'stringsUpBow',
    between_lines: false
  },
  // Bow up - up stroke
  'am': {
    code: 'stringsDownBow',
    between_lines: false
  },
  // Bow down - down stroke
  'a,': {
    code: 'pictChokeCymbal',
    between_lines: false
  } // Choked

};

Flow.accidentalCodes = function (acc) {
  return Flow.accidentalCodes.accidentals[acc];
};

Flow.accidentalCodes.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
  }
};
Flow.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]
  }
};

Flow.ornamentCodes = function (acc) {
  return Flow.ornamentCodes.ornaments[acc];
};

Flow.ornamentCodes.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'
  }
};

Flow.keySignature = function (spec) {
  var keySpec = Flow.keySignature.keySpecs[spec];

  if (!keySpec) {
    throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadKeySignature', "Bad key signature spec: '".concat(spec, "'"));
  }

  if (!keySpec.acc) {
    return [];
  }

  var notes = Flow.keySignature.accidentalList(keySpec.acc);
  var acc_list = [];

  for (var i = 0; i < keySpec.num; ++i) {
    var line = notes[i];
    acc_list.push({
      type: keySpec.acc,
      line: line
    });
  }

  return acc_list;
};

Flow.keySignature.keySpecs = {
  'C': {
    acc: null,
    num: 0
  },
  'Am': {
    acc: null,
    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
  }
};
Flow.unicode = {
  // Unicode accidentals
  'sharp': String.fromCharCode(parseInt('266F', 16)),
  'flat': String.fromCharCode(parseInt('266D', 16)),
  'natural': String.fromCharCode(parseInt('266E', 16)),
  // Major Chord
  'triangle': String.fromCharCode(parseInt('25B3', 16)),
  // half-diminished
  'o-with-slash': String.fromCharCode(parseInt('00F8', 16)),
  // Diminished
  'degrees': String.fromCharCode(parseInt('00B0', 16)),
  'circle': String.fromCharCode(parseInt('25CB', 16))
};

Flow.keySignature.accidentalList = function (acc) {
  var patterns = {
    'b': [2, 0.5, 2.5, 1, 3, 1.5, 3.5],
    '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2]
  };
  return patterns[acc];
}; // Used to convert duration aliases to the number based duration.
// If the input isn't an alias, simply return the input.
//
// example: 'q' -> '4', '8' -> '8'


Flow.sanitizeDuration = function (duration) {
  var alias = Flow.durationAliases[duration];

  if (alias !== undefined) {
    duration = alias;
  }

  if (Flow.durationToTicks.durations[duration] === undefined) {
    throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "The provided duration is not valid: ".concat(duration));
  }

  return duration;
}; // Convert the `duration` to an fraction


Flow.durationToFraction = function (duration) {
  return new _fraction__WEBPACK_IMPORTED_MODULE_1__["Fraction"]().parse(Flow.sanitizeDuration(duration));
}; // Convert the `duration` to an number


Flow.durationToNumber = function (duration) {
  return Flow.durationToFraction(duration).value();
}; // Convert the `duration` to total ticks


Flow.durationToTicks = function (duration) {
  duration = Flow.sanitizeDuration(duration);
  var ticks = Flow.durationToTicks.durations[duration];

  if (ticks === undefined) {
    return null;
  }

  return ticks;
};

Flow.durationToTicks.durations = {
  '1/2': Flow.RESOLUTION * 2,
  '1': Flow.RESOLUTION / 1,
  '2': Flow.RESOLUTION / 2,
  '4': Flow.RESOLUTION / 4,
  '8': Flow.RESOLUTION / 8,
  '16': Flow.RESOLUTION / 16,
  '32': Flow.RESOLUTION / 32,
  '64': Flow.RESOLUTION / 64,
  '128': Flow.RESOLUTION / 128,
  '256': Flow.RESOLUTION / 256
};
Flow.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'
}; // Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.

Flow.getGlyphProps = function (duration, type) {
  duration = Flow.sanitizeDuration(duration);
  type = type || 'n'; // default type is a regular note
  // Lookup duration for default glyph head code

  var code = Flow.getGlyphProps.duration_codes[duration];

  if (code === undefined) {
    return null;
  } // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)


  var glyphTypeProperties = code.type[type]; // If this isn't a standard type, then lookup the custom note head map.

  if (glyphTypeProperties === undefined) {
    // Try and get it from the custom list of note heads
    var customGlyphTypeProperties = Flow.keyProperties.customNoteHeads[type.toUpperCase()]; // If not, then return with nothing

    if (customGlyphTypeProperties === undefined) {
      return null;
    } // Otherwise set it as the code_head value


    glyphTypeProperties = _objectSpread({
      code_head: customGlyphTypeProperties.code
    }, customGlyphTypeProperties);
  } // Merge duration props for 'duration' with the note head properties.


  return _objectSpread({}, code.common, {}, glyphTypeProperties);
};

Flow.getGlyphProps.validTypes = {
  'n': {
    name: 'note'
  },
  'r': {
    name: 'rest'
  },
  'h': {
    name: 'harmonic'
  },
  'm': {
    name: 'muted'
  },
  's': {
    name: 'slash'
  }
}; // Custom note heads

Flow.keyProperties.customNoteHeads = {
  /* Diamond */
  'D0': {
    code: 'noteheadDiamondWhole'
  },
  'D1': {
    code: 'noteheadDiamondHalf'
  },
  'D2': {
    code: 'noteheadDiamondBlack'
  },
  'D3': {
    code: 'noteheadDiamondBlack'
  },

  /* Triangle */
  'T0': {
    code: 'noteheadTriangleUpWhole'
  },
  'T1': {
    code: 'noteheadTriangleUpHalf'
  },
  'T2': {
    code: 'noteheadTriangleUpBlack'
  },
  'T3': {
    code: 'noteheadTriangleUpBlack'
  },

  /* Cross */
  'X0': {
    code: 'noteheadXWhole'
  },
  'X1': {
    code: 'noteheadXHalf'
  },
  'X2': {
    code: 'noteheadXBlack'
  },
  'X3': {
    code: 'noteheadCircleX'
  },

  /* Square */
  'S1': {
    code: 'noteheadSquareWhite'
  },
  'S2': {
    code: 'noteheadSquareBlack'
  },

  /* Rectangle */
  'R1': {
    code: 'vexNoteHeadRectWhite'
  },
  // no smufl code
  'R2': {
    code: 'vexNoteHeadRectBlack'
  } // no smufl code

};
Flow.getGlyphProps.duration_codes = {
  '1/2': {
    common: {
      getWidth: function getWidth() {
        var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Flow.DEFAULT_NOTATION_FONT_SCALE;
        return new _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"](this.code_head || 'v53', scale).getMetrics().width;
      },
      stem: false,
      stem_offset: 0,
      flag: false,
      stem_up_extension: -Flow.STEM_HEIGHT,
      stem_down_extension: -Flow.STEM_HEIGHT,
      tabnote_stem_up_extension: -Flow.STEM_HEIGHT,
      tabnote_stem_down_extension: -Flow.STEM_HEIGHT,
      dot_shiftY: 0,
      line_above: 0,
      line_below: 0
    },
    type: {
      'n': {
        // Breve note
        code_head: 'noteheadDoubleWhole'
      },
      'h': {
        // Breve note harmonic
        code_head: 'unpitchedPercussionClef1'
      },
      'm': {
        // Breve note muted -
        code_head: 'vexNoteHeadMutedBreve',
        stem_offset: 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: function getWidth() {
          return Flow.SLASH_NOTEHEAD_WIDTH;
        },
        position: 'B/4'
      }
    }
  },
  '1': {
    common: {
      getWidth: function getWidth() {
        var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Flow.DEFAULT_NOTATION_FONT_SCALE;
        return new _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"](this.code_head || 'v1d', scale).getMetrics().width;
      },
      stem: false,
      stem_offset: 0,
      flag: false,
      stem_up_extension: -Flow.STEM_HEIGHT,
      stem_down_extension: -Flow.STEM_HEIGHT,
      tabnote_stem_up_extension: -Flow.STEM_HEIGHT,
      tabnote_stem_down_extension: -Flow.STEM_HEIGHT,
      dot_shiftY: 0,
      line_above: 0,
      line_below: 0
    },
    type: {
      'n': {
        // Whole note
        code_head: 'noteheadWhole'
      },
      'h': {
        // Whole note harmonic
        code_head: 'noteheadDiamondWhole'
      },
      'm': {
        // Whole note muted
        code_head: 'noteheadXWhole',
        stem_offset: -3
      },
      'r': {
        // Whole rest
        code_head: 'restWhole',
        rest: true,
        position: 'D/5',
        dot_shiftY: 0.5
      },
      's': {
        // Whole note slash
        // Drawn with canvas primitives
        getWidth: function getWidth() {
          return Flow.SLASH_NOTEHEAD_WIDTH;
        },
        position: 'B/4'
      }
    }
  },
  '2': {
    common: {
      getWidth: function getWidth() {
        var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Flow.DEFAULT_NOTATION_FONT_SCALE;
        return new _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"](this.code_head || 'noteheadHalf', scale).getMetrics().width;
      },
      stem: true,
      stem_offset: 0,
      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
    },
    type: {
      'n': {
        // Half note
        code_head: 'noteheadHalf'
      },
      'h': {
        // Half note harmonic
        code_head: 'noteheadDiamondHalf'
      },
      'm': {
        // Half note muted
        code_head: 'noteheadXHalf',
        stem_offset: -3
      },
      'r': {
        // Half rest
        code_head: 'restHalf',
        stem: false,
        rest: true,
        position: 'B/4',
        dot_shiftY: -0.5
      },
      's': {
        // Half note slash
        // Drawn with canvas primitives
        getWidth: function getWidth() {
          return Flow.SLASH_NOTEHEAD_WIDTH;
        },
        position: 'B/4'
      }
    }
  },
  '4': {
    common: {
      getWidth: function getWidth() {
        var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Flow.DEFAULT_NOTATION_FONT_SCALE;
        return new _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"](this.code_head || 'noteheadBlack', scale).getMetrics().width;
      },
      stem: true,
      stem_offset: 0,
      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
    },
    type: {
      'n': {
        // Quarter note
        code_head: 'noteheadBlack'
      },
      'h': {
        // Quarter harmonic
        code_head: 'noteheadDiamondBlack'
      },
      'm': {
        // Quarter muted
        code_head: 'noteheadXBlack'
      },
      '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: function getWidth() {
          return Flow.SLASH_NOTEHEAD_WIDTH;
        },
        position: 'B/4'
      }
    }
  },
  '8': {
    common: {
      getWidth: function getWidth() {
        var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Flow.DEFAULT_NOTATION_FONT_SCALE;
        return new _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"](this.code_head || 'noteheadBlack', scale).getMetrics().width;
      },
      stem: true,
      stem_offset: 0,
      flag: true,
      beam_count: 1,
      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
    },
    type: {
      'n': {
        // Eighth note
        code_head: 'noteheadBlack'
      },
      'h': {
        // Eighth note harmonic
        code_head: 'noteheadDiamondBlack'
      },
      'm': {
        // Eighth note muted
        code_head: 'noteheadXBlack'
      },
      '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': {
        // Eight slash
        // Drawn with canvas primitives
        getWidth: function getWidth() {
          return Flow.SLASH_NOTEHEAD_WIDTH;
        },
        position: 'B/4'
      }
    }
  },
  '16': {
    common: {
      beam_count: 2,
      getWidth: function getWidth() {
        var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Flow.DEFAULT_NOTATION_FONT_SCALE;
        return new _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"](this.code_head || 'noteheadBlack', scale).getMetrics().width;
      },
      stem: true,
      stem_offset: 0,
      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
    },
    type: {
      'n': {
        // Sixteenth note
        code_head: 'noteheadBlack'
      },
      'h': {
        // Sixteenth note harmonic
        code_head: 'noteheadDiamondBlack'
      },
      'm': {
        // Sixteenth note muted
        code_head: 'noteheadXBlack'
      },
      '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: function getWidth() {
          return Flow.SLASH_NOTEHEAD_WIDTH;
        },
        position: 'B/4'
      }
    }
  },
  '32': {
    common: {
      beam_count: 3,
      getWidth: function getWidth() {
        var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Flow.DEFAULT_NOTATION_FONT_SCALE;
        return new _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"](this.code_head || 'noteheadBlack', scale).getMetrics().width;
      },
      stem: true,
      stem_offset: 0,
      flag: true,
      code_flag_upstem: 'flag32ndUp',
      code_flag_downstem: 'flag32ndDown',
      stem_up_extension: 9,
      stem_down_extension: 9,
      tabnote_stem_up_extension: 8,
      tabnote_stem_down_extension: 5,
      dot_shiftY: 0,
      line_above: 0,
      line_below: 0
    },
    type: {
      'n': {
        // Thirty-second note
        code_head: 'noteheadBlack'
      },
      'h': {
        // Thirty-second harmonic
        code_head: 'noteheadDiamondBlack'
      },
      'm': {
        // Thirty-second muted
        code_head: 'noteheadXBlack'
      },
      '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: function getWidth() {
          return Flow.SLASH_NOTEHEAD_WIDTH;
        },
        position: 'B/4'
      }
    }
  },
  '64': {
    common: {
      beam_count: 4,
      getWidth: function getWidth() {
        var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Flow.DEFAULT_NOTATION_FONT_SCALE;
        return new _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"](this.code_head || 'noteheadBlack', scale).getMetrics().width;
      },
      stem: true,
      stem_offset: 0,
      flag: true,
      code_flag_upstem: 'flag64thUp',
      code_flag_downstem: 'flag64thDown',
      stem_up_extension: 13,
      stem_down_extension: 13,
      tabnote_stem_up_extension: 12,
      tabnote_stem_down_extension: 9,
      dot_shiftY: 0,
      line_above: 0,
      line_below: 0
    },
    type: {
      'n': {
        // Sixty-fourth note
        code_head: 'noteheadBlack'
      },
      'h': {
        // Sixty-fourth harmonic
        code_head: 'noteheadDiamondBlack'
      },
      'm': {
        // Sixty-fourth muted
        code_head: 'noteheadXBlack'
      },
      '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: function getWidth() {
          return Flow.SLASH_NOTEHEAD_WIDTH;
        },
        position: 'B/4'
      }
    }
  },
  '128': {
    common: {
      beam_count: 5,
      getWidth: function getWidth() {
        var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Flow.DEFAULT_NOTATION_FONT_SCALE;
        return new _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"](this.code_head || 'noteheadBlack', scale).getMetrics().width;
      },
      stem: true,
      stem_offset: 0,
      flag: true,
      code_flag_upstem: 'flag128thUp',
      code_flag_downstem: 'flag128thDown',
      stem_up_extension: 22,
      stem_down_extension: 22,
      tabnote_stem_up_extension: 21,
      tabnote_stem_down_extension: 18,
      dot_shiftY: 0,
      line_above: 0,
      line_below: 0
    },
    type: {
      'n': {
        // Hundred-twenty-eight note
        code_head: 'noteheadBlack'
      },
      'h': {
        // Hundred-twenty-eight harmonic
        code_head: 'noteheadDiamondBlack'
      },
      'm': {
        // Hundred-twenty-eight muted
        code_head: 'noteheadXBlack'
      },
      'r': {
        // Hundred-twenty-eight rest
        code_head: 'rest128th',
        stem: false,
        flag: false,
        rest: true,
        position: 'B/4',
        dot_shiftY: 1.5,
        line_above: 3.0,
        line_below: 3.0
      },
      's': {
        // Hundred-twenty-eight rest
        // Drawn with canvas primitives
        getWidth: function getWidth() {
          return Flow.SLASH_NOTEHEAD_WIDTH;
        },
        position: 'B/4'
      }
    }
  }
}; // Some defaults

Flow.TIME4_4 = {
  num_beats: 4,
  beat_value: 4,
  resolution: Flow.RESOLUTION
};


/***/ }),

/***/ "./src/tabnote.js":
/*!************************!*\
  !*** ./src/tabnote.js ***!
  \************************/
/*! exports provided: TabNote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TabNote", function() { return TabNote; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./stem */ "./src/stem.js");
/* harmony import */ var _stemmablenote__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stemmablenote */ "./src/stemmablenote.js");
/* harmony import */ var _dot__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dot */ "./src/dot.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }

function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://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.js` 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) {
  var stem_through = [];
  var group = [];

  for (var string = 1; string <= num_lines; string++) {
    var 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) {
  var up_stem = stem_direction !== 1;
  var down_stem = stem_direction !== -1;
  var line_spacing = stave.getSpacingBetweenLines();
  var total_lines = stave.getNumLines();
  var stem_lines = [];
  unused_strings.forEach(function (strings) {
    var containsLastString = strings.indexOf(total_lines) > -1;
    var 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]);
    }

    var line_ys = []; // Iterate through each group string and store it's y position

    strings.forEach(function (string, index, strings) {
      var isTopBound = string === 1;
      var 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

      var 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(function (a, b) {
      return a - b;
    }));
  });
  return stem_lines;
}

var TabNote =
/*#__PURE__*/
function (_StemmableNote) {
  _inherits(TabNote, _StemmableNote);

  _createClass(TabNote, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'tabnotes';
    } // Initialize the TabNote with a `tab_struct` full of properties
    // and whether to `draw_stem` when rendering the note

  }]);

  function TabNote(tab_struct, draw_stem) {
    var _this;

    _classCallCheck(this, TabNote);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(TabNote).call(this, tab_struct));

    _this.setAttribute('type', 'TabNote');

    _this.ghost = false; // Renders parenthesis around notes
    // Note properties
    //
    // The fret positions in the note. An array of `{ str: X, fret: X }`

    _this.positions = tab_struct.positions; // Render Options

    _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(_this.render_options, {
      // font size for note heads and rests
      glyph_font_scale: _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].DEFAULT_TABLATURE_FONT_SCALE,
      // Flag to draw a stem
      draw_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: '10pt Arial'
    });
    _this.glyph = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].getGlyphProps(_this.duration, _this.noteType);

    if (!_this.glyph) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', "Invalid note initialization data (No glyph found): ".concat(JSON.stringify(tab_struct)));
    }

    _this.buildStem();

    if (tab_struct.stem_direction) {
      _this.setStemDirection(tab_struct.stem_direction);
    } else {
      _this.setStemDirection(_stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].UP);
    } // Renders parenthesis around notes


    _this.ghost = false;

    _this.updateWidth();

    return _this;
  }

  _createClass(TabNote, [{
    key: "reset",
    value: function reset() {
      if (this.stave) this.setStave(this.stave);
    } // The ModifierContext category

  }, {
    key: "getCategory",
    value: function getCategory() {
      return TabNote.CATEGORY;
    } // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.
    // Often used for indicating frets that are being bent to

  }, {
    key: "setGhost",
    value: function setGhost(ghost) {
      this.ghost = ghost;
      this.updateWidth();
      return this;
    } // Determine if the note has a stem

  }, {
    key: "hasStem",
    value: function hasStem() {
      return this.render_options.draw_stem;
    } // Get the default stem extension for the note

  }, {
    key: "getStemExtension",
    value: function getStemExtension() {
      var glyph = this.getGlyph();

      if (this.stem_extension_override != null) {
        return this.stem_extension_override;
      }

      if (glyph) {
        return this.getStemDirection() === 1 ? glyph.tabnote_stem_up_extension : glyph.tabnote_stem_down_extension;
      }

      return 0;
    } // Add a dot to the note

  }, {
    key: "addDot",
    value: function addDot() {
      var dot = new _dot__WEBPACK_IMPORTED_MODULE_5__["Dot"]();
      this.dots += 1;
      return this.addModifier(dot, 0);
    } // Calculate and store the width of the note

  }, {
    key: "updateWidth",
    value: function updateWidth() {
      var _this2 = this;

      this.glyphs = [];
      this.width = 0;

      for (var i = 0; i < this.positions.length; ++i) {
        var fret = this.positions[i].fret;
        if (this.ghost) fret = '(' + fret + ')';
        var glyph = _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].tabToGlyph(fret, this.render_options.scale);
        this.glyphs.push(glyph);
        this.width = Math.max(glyph.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.glyph.getWidth = function () {
        return _this2.width;
      };
    } // Set the `stave` to the note

  }, {
    key: "setStave",
    value: function setStave(stave) {
      var _this3 = this;

      _get(_getPrototypeOf(TabNote.prototype), "setStave", this).call(this, stave);

      this.context = stave.context; // Calculate the fret number width based on font used

      var i;

      if (this.context) {
        var ctx = this.context;
        this.width = 0;

        var _loop = function _loop() {
          var glyph = _this3.glyphs[i];
          var text = '' + glyph.text;

          if (text.toUpperCase() !== 'X') {
            ctx.save();
            ctx.setRawFont(_this3.render_options.font);
            glyph.width = ctx.measureText(text).width;
            ctx.restore();

            glyph.getWidth = function () {
              return glyph.width;
            };
          }

          _this3.width = Math.max(glyph.getWidth(), _this3.width);
        };

        for (i = 0; i < this.glyphs.length; ++i) {
          _loop();
        }

        this.glyph.getWidth = function () {
          return _this3.width;
        };
      } // we subtract 1 from `line` because getYForLine expects a 0-based index,
      // while the position.str is a 1-based index


      var ys = this.positions.map(function (_ref) {
        var line = _ref.str;
        return stave.getYForLine(line - 1);
      });
      this.setYs(ys);

      if (this.stem) {
        this.stem.setYBounds(this.getStemY(), this.getStemY());
      }

      return this;
    } // Get the fret positions for the note

  }, {
    key: "getPositions",
    value: function getPositions() {
      return this.positions;
    } // Add self to the provided modifier context `mc`

  }, {
    key: "addToModifierContext",
    value: function addToModifierContext(mc) {
      this.setModifierContext(mc);

      for (var i = 0; i < this.modifiers.length; ++i) {
        this.modifierContext.addModifier(this.modifiers[i]);
      }

      this.modifierContext.addModifier(this);
      this.preFormatted = false;
      return this;
    } // Get the `x` coordinate to the right of the note

  }, {
    key: "getTieRightX",
    value: function getTieRightX() {
      var tieStartX = this.getAbsoluteX();
      var note_glyph_width = this.glyph.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

  }, {
    key: "getTieLeftX",
    value: function getTieLeftX() {
      var tieEndX = this.getAbsoluteX();
      var note_glyph_width = this.glyph.getWidth();
      tieEndX += note_glyph_width / 2;
      tieEndX -= this.width / 2 + 2;
      return tieEndX;
    } // Get the default `x` and `y` coordinates for a modifier at a specific
    // `position` at a fret position `index`

  }, {
    key: "getModifierStartXY",
    value: function getModifierStartXY(position, index) {
      if (!this.preFormatted) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('UnformattedNote', "Can't call GetModifierStartXY on an unformatted note");
      }

      if (this.ys.length === 0) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoYValues', 'No Y-Values calculated for this note.');
      }

      var 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) {
        var note_glyph_width = this.glyph.getWidth();
        x = note_glyph_width / 2;
      }

      return {
        x: this.getAbsoluteX() + x,
        y: this.ys[index]
      };
    } // Get the default line for rest

  }, {
    key: "getLineForRest",
    value: function getLineForRest() {
      return this.positions[0].str;
    } // Pre-render formatting

  }, {
    key: "preFormat",
    value: function preFormat() {
      if (this.preFormatted) return;
      if (this.modifierContext) this.modifierContext.preFormat(); // width is already set during init()

      this.setPreFormatted(true);
    } // Get the x position for the stem

  }, {
    key: "getStemX",
    value: function getStemX() {
      return this.getCenterGlyphX();
    } // Get the y position for the stem

  }, {
    key: "getStemY",
    value: function getStemY() {
      var num_lines = this.stave.getNumLines(); // The decimal staff line amounts provide optimal spacing between the
      // fret number and the stem

      var stemUpLine = -0.5;
      var stemDownLine = num_lines - 0.5;
      var stemStartLine = _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].UP === this.stem_direction ? stemUpLine : stemDownLine;
      return this.stave.getYForLine(stemStartLine);
    } // Get the stem extents for the tabnote

  }, {
    key: "getStemExtents",
    value: function getStemExtents() {
      return this.stem.getExtents();
    } // Draw the fal onto the context

  }, {
    key: "drawFlag",
    value: function drawFlag() {
      var beam = this.beam,
          glyph = this.glyph,
          context = this.context,
          stem = this.stem,
          stem_direction = this.stem_direction,
          _this$render_options = this.render_options,
          draw_stem = _this$render_options.draw_stem,
          glyph_font_scale = _this$render_options.glyph_font_scale;
      var shouldDrawFlag = beam == null && draw_stem; // Now it's the flag's turn.

      if (glyph.flag && shouldDrawFlag) {
        var flag_x = this.getStemX() + 1;
        var flag_y = this.getStemY() - stem.getHeight();
        var flag_code = stem_direction === _stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].DOWN ? glyph.code_flag_downstem // Down stems have flags on the left.
        : glyph.code_flag_upstem; // Draw the Flag

        _glyph__WEBPACK_IMPORTED_MODULE_6__["Glyph"].renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, {
          category: 'flag.tabStem'
        });
      }
    } // Render the modifiers onto the context

  }, {
    key: "drawModifiers",
    value: function drawModifiers() {
      var _this4 = this;

      // Draw the modifiers
      this.modifiers.forEach(function (modifier) {
        // Only draw the dots if enabled
        if (modifier.getCategory() === 'dots' && !_this4.render_options.draw_dots) return;
        modifier.setContext(_this4.context);
        modifier.drawWithStyle();
      });
    } // Render the stem extension through the fret positions

  }, {
    key: "drawStemThrough",
    value: function drawStemThrough() {
      var stem_x = this.getStemX();
      var stem_y = this.getStemY();
      var ctx = this.context;
      var stem_through = this.render_options.draw_stem_through_stave;
      var draw_stem = this.render_options.draw_stem;

      if (draw_stem && stem_through) {
        var total_lines = this.stave.getNumLines();
        var strings_used = this.positions.map(function (position) {
          return position.str;
        });
        var unused_strings = getUnusedStringGroups(total_lines, strings_used);
        var stem_lines = getPartialStemLines(stem_y, unused_strings, this.getStave(), this.getStemDirection());
        ctx.save();
        ctx.setLineWidth(_stem__WEBPACK_IMPORTED_MODULE_3__["Stem"].WIDTH);
        stem_lines.forEach(function (bounds) {
          if (bounds.length === 0) return;
          ctx.beginPath();
          ctx.moveTo(stem_x, bounds[0]);
          ctx.lineTo(stem_x, bounds[bounds.length - 1]);
          ctx.stroke();
          ctx.closePath();
        });
        ctx.restore();
      }
    } // Render the fret positions onto the context

  }, {
    key: "drawPositions",
    value: function drawPositions() {
      var ctx = this.context;
      var x = this.getAbsoluteX();
      var ys = this.ys;

      for (var i = 0; i < this.positions.length; ++i) {
        var y = ys[i] + this.render_options.y_shift;
        var glyph = this.glyphs[i]; // Center the fret text beneath the notation note head

        var note_glyph_width = this.glyph.getWidth();
        var tab_x = x + note_glyph_width / 2 - glyph.getWidth() / 2; // FIXME: Magic numbers.

        ctx.clearRect(tab_x - 2, y - 3, glyph.getWidth() + 4, 6);

        if (glyph.code) {
          _glyph__WEBPACK_IMPORTED_MODULE_6__["Glyph"].renderGlyph(ctx, tab_x, y, this.render_options.glyph_font_scale * this.render_options.scale, glyph.code);
        } else {
          ctx.save();
          ctx.setRawFont(this.render_options.font);
          var text = glyph.text.toString();
          ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);
          ctx.restore();
        }
      }
    } // The main rendering function for the entire note

  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();

      if (!this.stave) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoStave', "Can't draw without a stave.");
      }

      if (this.ys.length === 0) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoYValues', "Can't draw note without Y values.");
      }

      this.setRendered();
      var render_stem = this.beam == null && this.render_options.draw_stem;
      this.drawPositions();
      this.drawStemThrough();
      var stem_x = this.getStemX();
      this.stem.setNoteHeadXBounds(stem_x, stem_x);

      if (render_stem) {
        this.context.openGroup('stem', null, {
          pointerBBox: true
        });
        this.stem.setContext(this.context).draw();
        this.context.closeGroup();
      }

      this.drawFlag();
      this.drawModifiers();
    }
  }]);

  return TabNote;
}(_stemmablenote__WEBPACK_IMPORTED_MODULE_4__["StemmableNote"]);

/***/ }),

/***/ "./src/tabslide.js":
/*!*************************!*\
  !*** ./src/tabslide.js ***!
  \*************************/
/*! exports provided: TabSlide */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TabSlide", function() { return TabSlide; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tabtie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tabtie */ "./src/tabtie.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://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.


var TabSlide =
/*#__PURE__*/
function (_TabTie) {
  _inherits(TabSlide, _TabTie);

  _createClass(TabSlide, null, [{
    key: "createSlideUp",
    value: function createSlideUp(notes) {
      return new TabSlide(notes, TabSlide.SLIDE_UP);
    }
  }, {
    key: "createSlideDown",
    value: function createSlideDown(notes) {
      return new TabSlide(notes, TabSlide.SLIDE_DOWN);
    }
  }, {
    key: "SLIDE_UP",
    get: function get() {
      return 1;
    }
  }, {
    key: "SLIDE_DOWN",
    get: function get() {
      return -1;
    }
  }]);

  function TabSlide(notes, direction) {
    var _this;

    _classCallCheck(this, TabSlide);

    /**
     * Notes is a struct that has:
     *
     *  {
     *    first_note: Note,
     *    last_note: Note,
     *    first_indices: [n1, n2, n3],
     *    last_indices: [n1, n2, n3]
     *  }
     *
     **/
    _this = _possibleConstructorReturn(this, _getPrototypeOf(TabSlide).call(this, notes, 'sl.'));

    _this.setAttribute('type', 'TabSlide');

    if (!direction) {
      var first_fret = notes.first_note.getPositions()[0].fret;
      var last_fret = notes.last_note.getPositions()[0].fret;
      direction = parseInt(first_fret, 10) > parseInt(last_fret, 10) ? TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP;
    }

    _this.slide_direction = direction;
    _this.render_options.cp1 = 11;
    _this.render_options.cp2 = 14;
    _this.render_options.y_shift = 0.5;

    _this.setFont({
      font: 'Times',
      size: 10,
      style: 'bold italic'
    });

    _this.setNotes(notes);

    return _this;
  }

  _createClass(TabSlide, [{
    key: "renderTie",
    value: function renderTie(params) {
      if (params.first_ys.length === 0 || params.last_ys.length === 0) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', 'No Y-values to render');
      }

      var ctx = this.context;
      var first_x_px = params.first_x_px;
      var first_ys = params.first_ys;
      var last_x_px = params.last_x_px;
      var direction = this.slide_direction;

      if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadSlide', 'Invalid slide direction');
      }

      for (var i = 0; i < this.first_indices.length; ++i) {
        var slide_y = first_ys[this.first_indices[i]] + this.render_options.y_shift;

        if (isNaN(slide_y)) {
          throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('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();
    }
  }]);

  return TabSlide;
}(_tabtie__WEBPACK_IMPORTED_MODULE_1__["TabTie"]);

/***/ }),

/***/ "./src/tabstave.js":
/*!*************************!*\
  !*** ./src/tabstave.js ***!
  \*************************/
/*! exports provided: TabStave */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TabStave", function() { return TabStave; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _stave__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stave */ "./src/stave.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.


var TabStave =
/*#__PURE__*/
function (_Stave) {
  _inherits(TabStave, _Stave);

  function TabStave(x, y, width, options) {
    var _this;

    _classCallCheck(this, TabStave);

    var tab_options = {
      spacing_between_lines_px: 13,
      num_lines: 6,
      top_text_position: 1
    };
    _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(tab_options, options);
    _this = _possibleConstructorReturn(this, _getPrototypeOf(TabStave).call(this, x, y, width, tab_options));

    _this.setAttribute('type', 'TabStave');

    return _this;
  }

  _createClass(TabStave, [{
    key: "getYForGlyphs",
    value: function getYForGlyphs() {
      return this.getYForLine(2.5);
    } // Deprecated

  }, {
    key: "addTabGlyph",
    value: function addTabGlyph() {
      this.addClef('tab');
      return this;
    }
  }]);

  return TabStave;
}(_stave__WEBPACK_IMPORTED_MODULE_1__["Stave"]);

/***/ }),

/***/ "./src/tabtie.js":
/*!***********************!*\
  !*** ./src/tabtie.js ***!
  \***********************/
/*! exports provided: TabTie */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TabTie", function() { return TabTie; });
/* harmony import */ var _stavetie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./stavetie */ "./src/stavetie.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// / [VexFlow](http://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.

var TabTie =
/*#__PURE__*/
function (_StaveTie) {
  _inherits(TabTie, _StaveTie);

  _createClass(TabTie, null, [{
    key: "createHammeron",
    value: function createHammeron(notes) {
      return new TabTie(notes, 'H');
    }
  }, {
    key: "createPulloff",
    value: function createPulloff(notes) {
      return new TabTie(notes, 'P');
    }
  }]);

  function TabTie(notes, text) {
    var _this;

    _classCallCheck(this, TabTie);

    /**
     * Notes is a struct that has:
     *
     *  {
     *    first_note: Note,
     *    last_note: Note,
     *    first_indices: [n1, n2, n3],
     *    last_indices: [n1, n2, n3]
     *  }
     *
     **/
    _this = _possibleConstructorReturn(this, _getPrototypeOf(TabTie).call(this, notes, text));

    _this.setAttribute('type', 'TabTie');

    _this.render_options.cp1 = 9;
    _this.render_options.cp2 = 11;
    _this.render_options.y_shift = 3;

    _this.setNotes(notes);

    return _this;
  }

  _createClass(TabTie, [{
    key: "draw",
    value: function draw() {
      this.checkContext();
      this.setRendered();
      var first_note = this.first_note;
      var last_note = this.last_note;
      var first_x_px;
      var last_x_px;
      var first_ys;
      var last_ys;

      if (first_note) {
        first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;
        first_ys = first_note.getYs();
      } else {
        first_x_px = last_note.getStave().getTieStartX();
        first_ys = last_note.getYs();
        this.first_indices = this.last_indices;
      }

      if (last_note) {
        last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;
        last_ys = last_note.getYs();
      } else {
        last_x_px = first_note.getStave().getTieEndX();
        last_ys = first_note.getYs();
        this.last_indices = this.first_indices;
      }

      this.renderTie({
        first_x_px: first_x_px,
        last_x_px: last_x_px,
        first_ys: first_ys,
        last_ys: last_ys,
        direction: -1 // Tab tie's are always face up.

      });
      this.renderText(first_x_px, last_x_px);
      return true;
    }
  }]);

  return TabTie;
}(_stavetie__WEBPACK_IMPORTED_MODULE_0__["StaveTie"]);

/***/ }),

/***/ "./src/textbracket.js":
/*!****************************!*\
  !*** ./src/textbracket.js ***!
  \****************************/
/*! exports provided: TextBracket */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextBracket", function() { return TextBracket; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _renderer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./renderer */ "./src/renderer.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author: Cyril Silverman
//
// ## Description
//
// This file implement `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`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (TextBracket.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.TextBracket', args);
}

var TextBracket =
/*#__PURE__*/
function (_Element) {
  _inherits(TextBracket, _Element);

  _createClass(TextBracket, null, [{
    key: "Positions",
    // FIXME: Modifier.Position is singular while this is plural, make consistent
    get: function get() {
      return {
        TOP: 1,
        BOTTOM: -1
      };
    }
  }, {
    key: "PositionString",
    get: function get() {
      return {
        top: TextBracket.Positions.TOP,
        bottom: TextBracket.Positions.BOTTOM
      };
    }
  }]);

  function TextBracket(_ref) {
    var _this;

    var start = _ref.start,
        stop = _ref.stop,
        _ref$text = _ref.text,
        text = _ref$text === void 0 ? '' : _ref$text,
        _ref$superscript = _ref.superscript,
        superscript = _ref$superscript === void 0 ? '' : _ref$superscript,
        _ref$position = _ref.position,
        position = _ref$position === void 0 ? TextBracket.Positions.TOP : _ref$position;

    _classCallCheck(this, TextBracket);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(TextBracket).call(this));

    _this.setAttribute('type', 'TextBracket');

    _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.font = {
      family: 'Serif',
      size: 15,
      weight: 'italic'
    };
    _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
    };
    return _this;
  } // Apply the text backet styling to the provided `context`


  _createClass(TextBracket, [{
    key: "applyStyle",
    value: function applyStyle(context) {
      // Apply style for the octave bracket
      context.setFont(this.font.family, this.font.size, this.font.weight);
      context.setStrokeStyle(this.render_options.color);
      context.setFillStyle(this.render_options.color);
      context.setLineWidth(this.render_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

  }, {
    key: "setDashed",
    value: function setDashed(dashed, dash) {
      this.render_options.dashed = dashed;
      if (dash) this.render_options.dash = dash;
      return this;
    } // Set the font for the text

  }, {
    key: "setFont",
    value: function setFont(font) {
      // We use Object.assign to support partial updates to the font object
      this.font = _objectSpread({}, this.font, {}, font);
      return this;
    } // Set the rendering `context` for the octave bracket

  }, {
    key: "setLine",
    value: function setLine(line) {
      this.line = line;
      return this;
    } // Draw the octave bracket on the rendering context

  }, {
    key: "draw",
    value: function draw() {
      var ctx = this.context;
      this.setRendered();
      var y = 0;

      switch (this.position) {
        case TextBracket.Positions.TOP:
          y = this.start.getStave().getYForTopText(this.line);
          break;

        case TextBracket.Positions.BOTTOM:
          y = this.start.getStave().getYForBottomText(this.line + _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].TEXT_HEIGHT_OFFSET_HACK);
          break;

        default:
          throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('InvalidPosition', "The position ".concat(this.position, " is invalid"));
      } // Get the preliminary start and stop coordintates for the bracket


      var start = {
        x: this.start.getAbsoluteX(),
        y: y
      };
      var stop = {
        x: this.stop.getAbsoluteX(),
        y: y
      };
      L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);
      var 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

      var main_width = ctx.measureText(this.text).width;
      var main_height = ctx.measureText('M').width; // Calculate the y position for the super script

      var super_y = start.y - main_height / 2.5; // Draw the superscript

      ctx.setFont(this.font.family, this.font.size / 1.4, this.font.weight);
      ctx.fillText(this.superscript, start.x + main_width + 1, super_y); // Determine width and height of the superscript

      var superscript_width = ctx.measureText(this.superscript).width;
      var super_height = ctx.measureText('M').width; // Setup initial coordinates for the bracket line

      var start_x = start.x;
      var line_y = super_y;
      var end_x = stop.x + this.stop.getGlyph().getWidth(); // Adjust x and y coordinates based on position

      if (this.position === TextBracket.Positions.TOP) {
        start_x += main_width + superscript_width + 5;
        line_y -= super_height / 2.7;
      } else if (this.position === TextBracket.Positions.BOTTOM) {
        line_y += super_height / 2.7;
        start_x += main_width + 2;

        if (!this.render_options.underline_superscript) {
          start_x += superscript_width;
        }
      }

      if (this.render_options.dashed) {
        // Main line
        _renderer__WEBPACK_IMPORTED_MODULE_3__["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_3__["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();
    }
  }]);

  return TextBracket;
}(_element__WEBPACK_IMPORTED_MODULE_2__["Element"]);

/***/ }),

/***/ "./src/textdynamics.js":
/*!*****************************!*\
  !*** ./src/textdynamics.js ***!
  \*****************************/
/*! exports provided: TextDynamics */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDynamics", function() { return TextDynamics; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// This file implements the `TextDynamics` which 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


 // To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (TextDynamics.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.TextDynamics', args);
}

var TextDynamics =
/*#__PURE__*/
function (_Note) {
  _inherits(TextDynamics, _Note);

  _createClass(TextDynamics, null, [{
    key: "GLYPHS",
    // The glyph data for each dynamics letter
    get: function get() {
      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
        }
      };
    } // A `TextDynamics` object inherits from `Note` so that it can be formatted
    // within a `Voice`.
    // Create the dynamics marking. `text_struct` is an object
    // that contains a `duration` property and a `sequence` of
    // letters that represents the letters to render

  }]);

  function TextDynamics(text_struct) {
    var _this;

    _classCallCheck(this, TextDynamics);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(TextDynamics).call(this, text_struct));

    _this.setAttribute('type', 'TextDynamics');

    _this.sequence = text_struct.text.toLowerCase();
    _this.line = text_struct.line || 0;
    _this.glyphs = [];
    _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge(_this.render_options, {
      glyph_font_size: 40
    });
    L('New Dynamics Text: ', _this.sequence);
    return _this;
  } // Set the Stave line on which the note should be placed


  _createClass(TextDynamics, [{
    key: "setLine",
    value: function setLine(line) {
      this.line = line;
      return this;
    } // Preformat the dynamics text

  }, {
    key: "preFormat",
    value: function preFormat() {
      var _this2 = this;

      var total_width = 0; // Iterate through each letter

      this.sequence.split('').forEach(function (letter) {
        // Get the glyph data for the letter
        var glyph_data = TextDynamics.GLYPHS[letter];
        if (!glyph_data) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('Invalid dynamics character: ' + letter);
        var size = _this2.render_options.glyph_font_size;
        var glyph = new _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"](glyph_data.code, size, {
          category: 'textNote'
        }); // Add the glyph

        _this2.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

  }, {
    key: "draw",
    value: function draw() {
      var _this3 = this;

      this.setRendered();
      var x = this.getAbsoluteX();
      var y = this.stave.getYForLine(this.line + -3);
      L('Rendering Dynamics: ', this.sequence);
      var letter_x = x;
      this.glyphs.forEach(function (glyph, index) {
        var current_letter = _this3.sequence[index];
        glyph.render(_this3.context, letter_x, y);
        letter_x += TextDynamics.GLYPHS[current_letter].width;
      });
    }
  }]);

  return TextDynamics;
}(_note__WEBPACK_IMPORTED_MODULE_1__["Note"]);

/***/ }),

/***/ "./src/textnote.js":
/*!*************************!*\
  !*** ./src/textnote.js ***!
  \*************************/
/*! exports provided: TextNote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextNote", function() { return TextNote; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./note */ "./src/note.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// `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.
// Examples of this would be such as dynamics, lyrics, chord changes, etc.



var TextNote =
/*#__PURE__*/
function (_Note) {
  _inherits(TextNote, _Note);

  _createClass(TextNote, null, [{
    key: "Justification",
    get: function get() {
      return {
        LEFT: 1,
        CENTER: 2,
        RIGHT: 3
      };
    } // Glyph data

  }, {
    key: "GLYPHS",
    get: function get() {
      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'
        }
      };
    }
  }]);

  function TextNote(options) {
    var _this;

    _classCallCheck(this, TextNote);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(TextNote).call(this, options));

    _this.setAttribute('type', 'TextNote'); // Note properties


    _this.text = options.text;
    _this.superscript = options.superscript;
    _this.subscript = options.subscript;
    _this.glyph = null;
    _this.font = _objectSpread({
      family: 'Arial',
      size: 12,
      weight: ''
    }, options.font); // 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 `canvasmeasureText()`

    if (options.glyph) {
      var struct = TextNote.GLYPHS[options.glyph];
      if (!struct) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('Invalid glyph type: ' + options.glyph);
      _this.glyph = new _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"](struct.code, 40, {
        category: 'textNote'
      });

      _this.setWidth(_this.glyph.getMetrics().width);
    }

    _this.line = options.line || 0;
    _this.smooth = options.smooth || false;
    _this.ignore_ticks = options.ignore_ticks || false;
    _this.justification = TextNote.Justification.LEFT;
    return _this;
  } // Set the horizontal justification of the TextNote


  _createClass(TextNote, [{
    key: "setJustification",
    value: function setJustification(just) {
      this.justification = just;
      return this;
    } // Set the Stave line on which the note should be placed

  }, {
    key: "setLine",
    value: function setLine(line) {
      this.line = line;
      return this;
    } // Pre-render formatting

  }, {
    key: "preFormat",
    value: function preFormat() {
      this.checkContext();
      if (this.preFormatted) return;

      if (this.smooth) {
        this.setWidth(0);
      } else {
        if (this.glyph) {// Width already set.
        } else {
          this.context.setFont(this.font.family, this.font.size, this.font.weight);
          this.setWidth(this.context.measureText(this.text).width);
        }
      }

      if (this.justification === TextNote.Justification.CENTER) {
        this.leftDisplacedHeadPx = this.width / 2;
      } else if (this.justification === TextNote.Justification.RIGHT) {
        this.leftDisplacedHeadPx = this.width;
      } // We reposition to the center of the note head


      this.rightDisplacedHeadPx = this.tickContext.getMetrics().glyphPx / 2;
      this.setPreFormatted(true);
    } // Renders the TextNote

  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();

      if (!this.stave) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoStave', "Can't draw without a stave.");
      }

      this.setRendered();
      var ctx = this.context; // Reposition to center of note head

      var x = this.getAbsoluteX() + this.tickContext.getMetrics().glyphPx / 2; // Align based on tick-context width.

      var width = this.getWidth();

      if (this.justification === TextNote.Justification.CENTER) {
        x -= width / 2;
      } else if (this.justification === TextNote.Justification.RIGHT) {
        x -= width;
      }

      var y;

      if (this.glyph) {
        y = this.stave.getYForLine(this.line + -3);
        this.glyph.render(this.context, x, y);
      } else {
        y = this.stave.getYForLine(this.line + -3);
        this.applyStyle(ctx);
        ctx.setFont(this.font.family, this.font.size, this.font.weight);
        ctx.fillText(this.text, x, y);
        var height = ctx.measureText(this.text).height; // Write superscript

        if (this.superscript) {
          ctx.setFont(this.font.family, this.font.size / 1.3, this.font.weight);
          ctx.fillText(this.superscript, x + width + 2, y - height / 2.2);
        } // Write subscript


        if (this.subscript) {
          ctx.setFont(this.font.family, this.font.size / 1.3, this.font.weight);
          ctx.fillText(this.subscript, x + width + 2, y + height / 2.2 - 1);
        }

        this.restoreStyle(ctx);
      }
    }
  }]);

  return TextNote;
}(_note__WEBPACK_IMPORTED_MODULE_1__["Note"]);

/***/ }),

/***/ "./src/tickable.js":
/*!*************************!*\
  !*** ./src/tickable.js ***!
  \*************************/
/*! exports provided: Tickable */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Tickable", function() { return Tickable; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fraction */ "./src/fraction.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// The tickable interface. Tickables are things that sit on a score and
// have a duration, i.e., they occupy space in the musical rendering dimension.




var Tickable =
/*#__PURE__*/
function (_Element) {
  _inherits(Tickable, _Element);

  function Tickable() {
    var _this;

    _classCallCheck(this, Tickable);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Tickable).call(this));

    _this.setAttribute('type', 'Tickable'); // These properties represent the duration of
    // this tickable element.


    _this.ticks = new _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"](0, 1); // Fractional value of ticks

    _this.intrinsicTicks = 0; // Floating point value of ticks

    _this.tickMultiplier = new _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"](1, 1); // Formatter metrics

    _this.width = 0;
    _this.x_shift = 0; // Shift from tick context

    _this.voice = null;
    _this.tickContext = null;
    _this.modifierContext = null;
    _this.modifiers = [];
    _this.preFormatted = false;
    _this.postFormatted = false;
    _this.tuplet = null;
    _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
      }
    };
    return _this;
  }

  _createClass(Tickable, [{
    key: "reset",
    value: function reset() {
      return this;
    }
  }, {
    key: "getTicks",
    value: function getTicks() {
      return this.ticks;
    }
  }, {
    key: "shouldIgnoreTicks",
    value: function shouldIgnoreTicks() {
      return this.ignore_ticks;
    } // Get and set width of note. Used by the formatter for positioning.

  }, {
    key: "setWidth",
    value: function setWidth(width) {
      this.width = width;
    }
  }, {
    key: "getWidth",
    value: function getWidth() {
      if (!this.preFormatted) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('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.

  }, {
    key: "setXShift",
    value: function setXShift(x) {
      this.x_shift = x;
      return this;
    }
  }, {
    key: "getXShift",
    value: function getXShift() {
      return this.x_shift;
    } // Get `X` position of this tick context.

  }, {
    key: "getX",
    value: function getX() {
      if (!this.tickContext) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoTickContext', 'Note needs a TickContext assigned for an X-Value');
      }

      return this.tickContext.getX() + this.x_shift;
    }
  }, {
    key: "getFormatterMetrics",
    value: function getFormatterMetrics() {
      return this.formatterMetrics;
    }
  }, {
    key: "getCenterXShift",
    value: function getCenterXShift() {
      if (this.isCenterAligned()) {
        return this.center_x_shift;
      }

      return 0;
    }
  }, {
    key: "isCenterAligned",
    value: function isCenterAligned() {
      return this.align_center;
    }
  }, {
    key: "setCenterAlignment",
    value: function setCenterAlignment(align_center) {
      this.align_center = align_center;
      return this;
    } // Every tickable must be associated with a voice. This allows formatters
    // and preFormatter to associate them with the right modifierContexts.

  }, {
    key: "getVoice",
    value: function getVoice() {
      if (!this.voice) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoVoice', 'Tickable has no voice.');
      return this.voice;
    }
  }, {
    key: "setVoice",
    value: function setVoice(voice) {
      this.voice = voice;
    }
  }, {
    key: "getTuplet",
    value: function getTuplet() {
      return this.tuplet;
    }
    /*
     * resetTuplet
     * @param tuplet -- the specific tuplet to reset
     *   if this is not provided, all tuplets are reset.
     * @returns this
     *
     * Removes any prior tuplets from the tick calculation and
     * resets the intrinsic tick value to
     */

  }, {
    key: "resetTuplet",
    value: function resetTuplet(tuplet) {
      var noteCount;
      var notesOccupied;

      if (tuplet) {
        var 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;
    }
  }, {
    key: "setTuplet",
    value: function setTuplet(tuplet) {
      // Attach to new tuplet
      if (tuplet) {
        this.tupletStack.push(tuplet);
        var noteCount = tuplet.getNoteCount();
        var notesOccupied = tuplet.getNotesOccupied();
        this.applyTickMultiplier(notesOccupied, noteCount);
      }

      this.tuplet = tuplet;
      return this;
    }
    /** optional, if tickable has modifiers **/

  }, {
    key: "addToModifierContext",
    value: function addToModifierContext(mc) {
      this.modifierContext = mc; // Add modifiers to modifier context (if any)

      this.preFormatted = false;
    }
    /** optional, if tickable has modifiers **/

  }, {
    key: "addModifier",
    value: function addModifier(mod) {
      this.modifiers.push(mod);
      this.preFormatted = false;
      return this;
    }
  }, {
    key: "getModifiers",
    value: function getModifiers() {
      return this.modifiers;
    }
  }, {
    key: "setTickContext",
    value: function setTickContext(tc) {
      this.tickContext = tc;
      this.preFormatted = false;
    }
  }, {
    key: "preFormat",
    value: function preFormat() {
      if (this.preFormatted) return;
      this.width = 0;

      if (this.modifierContext) {
        this.modifierContext.preFormat();
        this.width += this.modifierContext.getWidth();
      }
    }
  }, {
    key: "postFormat",
    value: function postFormat() {
      if (this.postFormatted) return this;
      this.postFormatted = true;
      return this;
    }
  }, {
    key: "getIntrinsicTicks",
    value: function getIntrinsicTicks() {
      return this.intrinsicTicks;
    }
  }, {
    key: "setIntrinsicTicks",
    value: function setIntrinsicTicks(intrinsicTicks) {
      this.intrinsicTicks = intrinsicTicks;
      this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);
    }
  }, {
    key: "getTickMultiplier",
    value: function getTickMultiplier() {
      return this.tickMultiplier;
    }
  }, {
    key: "applyTickMultiplier",
    value: function applyTickMultiplier(numerator, denominator) {
      this.tickMultiplier.multiply(numerator, denominator);
      this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);
    }
  }, {
    key: "setDuration",
    value: function setDuration(duration) {
      var ticks = duration.numerator * (_tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].RESOLUTION / duration.denominator);
      this.ticks = this.tickMultiplier.clone().multiply(ticks);
      this.intrinsicTicks = this.ticks.value();
    }
  }]);

  return Tickable;
}(_element__WEBPACK_IMPORTED_MODULE_1__["Element"]);

/***/ }),

/***/ "./src/tickcontext.js":
/*!****************************!*\
  !*** ./src/tickcontext.js ***!
  \****************************/
/*! exports provided: TickContext */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TickContext", function() { return TickContext; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tickable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tickable */ "./src/tickable.js");
/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fraction */ "./src/fraction.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// A formatter for abstract tickable objects, such as notes, chords,
// tabs, etc.



var TickContext =
/*#__PURE__*/
function (_Tickable) {
  _inherits(TickContext, _Tickable);

  _createClass(TickContext, null, [{
    key: "getNextContext",
    value: function getNextContext(tContext) {
      var contexts = tContext.tContexts;
      var index = contexts.indexOf(tContext);
      return contexts[index + 1];
    }
  }]);

  function TickContext(options) {
    var _this;

    _classCallCheck(this, TickContext);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(TickContext).call(this));
    _this.tickID = options && options.tickID;

    _this.setAttribute('type', 'TickContext');

    _this.currentTick = new _fraction__WEBPACK_IMPORTED_MODULE_2__["Fraction"](0, 1);
    _this.maxTicks = new _fraction__WEBPACK_IMPORTED_MODULE_2__["Fraction"](0, 1);
    _this.maxTickable = null; // Biggest tickable

    _this.minTicks = null; // this can remian null if all tickables have ignore_ticks

    _this.minTickable = null;
    _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 indeced 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

    return _this;
  }

  _createClass(TickContext, [{
    key: "getTickID",
    value: function getTickID() {
      return this.tickID;
    }
  }, {
    key: "getX",
    value: function getX() {
      return this.x;
    }
  }, {
    key: "setX",
    value: function setX(x) {
      this.x = x;
      this.xBase = x;
      this.xOffset = 0;
      return this;
    }
  }, {
    key: "getXBase",
    value: function getXBase() {
      return this.xBase;
    } // use of xBase and xOffset is optional, avoids offset creep

  }, {
    key: "setXBase",
    value: function setXBase(xBase) {
      this.xBase = xBase;
      this.x = xBase + this.xOffset;
    }
  }, {
    key: "getXOffset",
    value: function getXOffset() {
      return this.xOffset;
    }
  }, {
    key: "setXOffset",
    value: function setXOffset(xOffset) {
      this.xOffset = xOffset;
      this.x = this.xBase + xOffset;
    }
  }, {
    key: "getWidth",
    value: function getWidth() {
      return this.width + this.padding * 2;
    }
  }, {
    key: "setPadding",
    value: function setPadding(padding) {
      this.padding = padding;
      return this;
    }
  }, {
    key: "getMaxTicks",
    value: function getMaxTicks() {
      return this.maxTicks;
    }
  }, {
    key: "getMinTicks",
    value: function getMinTicks() {
      return this.minTicks;
    }
  }, {
    key: "getMaxTickable",
    value: function getMaxTickable() {
      return this.maxTickable;
    }
  }, {
    key: "getMinTickable",
    value: function getMinTickable() {
      return this.minTickable;
    }
  }, {
    key: "getTickables",
    value: function getTickables() {
      return this.tickables;
    }
  }, {
    key: "getTickablesForVoice",
    value: function getTickablesForVoice(voiceIndex) {
      return this.tickablesByVoice[voiceIndex];
    }
  }, {
    key: "getTickablesByVoice",
    value: function getTickablesByVoice() {
      return this.tickablesByVoice;
    }
  }, {
    key: "getCenterAlignedTickables",
    value: function getCenterAlignedTickables() {
      return this.tickables.filter(function (tickable) {
        return tickable.isCenterAligned();
      });
    } // Get widths context, note and left/right modifiers for formatting

  }, {
    key: "getMetrics",
    value: function getMetrics() {
      var width = this.width,
          glyphPx = this.glyphPx,
          notePx = this.notePx,
          leftDisplacedHeadPx = this.leftDisplacedHeadPx,
          rightDisplacedHeadPx = this.rightDisplacedHeadPx,
          modLeftPx = this.modLeftPx,
          modRightPx = this.modRightPx,
          totalLeftPx = this.totalLeftPx,
          totalRightPx = this.totalRightPx;
      return {
        width: width,
        // Width of largest tickable in context
        glyphPx: glyphPx,
        // Width of largest glyph (note head)
        notePx: notePx,
        // Width of notehead + stem
        leftDisplacedHeadPx: leftDisplacedHeadPx,
        // Left modifiers
        rightDisplacedHeadPx: rightDisplacedHeadPx,
        // Right modifiers
        modLeftPx: modLeftPx,
        modRightPx: modRightPx,
        totalLeftPx: totalLeftPx,
        totalRightPx: totalRightPx
      };
    }
  }, {
    key: "getCurrentTick",
    value: function getCurrentTick() {
      return this.currentTick;
    }
  }, {
    key: "setCurrentTick",
    value: function setCurrentTick(tick) {
      this.currentTick = tick;
      this.preFormatted = false;
    }
  }, {
    key: "addTickable",
    value: function addTickable(tickable, voiceIndex) {
      if (!tickable) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArgument', 'Invalid tickable added.');
      }

      if (!tickable.shouldIgnoreTicks()) {
        this.ignore_ticks = false;
        var 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] = tickable;
      this.preFormatted = false;
      return this;
    }
  }, {
    key: "preFormat",
    value: function preFormat() {
      if (this.preFormatted) return this;

      for (var i = 0; i < this.tickables.length; ++i) {
        var tickable = this.tickables[i];
        tickable.preFormat();
        var 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); // 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;
    }
  }, {
    key: "postFormat",
    value: function postFormat() {
      if (this.postFormatted) return this;
      this.postFormatted = true;
      return this;
    }
  }]);

  return TickContext;
}(_tickable__WEBPACK_IMPORTED_MODULE_1__["Tickable"]);

/***/ }),

/***/ "./src/timesignature.js":
/*!******************************!*\
  !*** ./src/timesignature.js ***!
  \******************************/
/*! exports provided: TimeSignature */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeSignature", function() { return TimeSignature; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
/* harmony import */ var _stavemodifier__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./stavemodifier */ "./src/stavemodifier.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }

function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }

function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }

function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// Implements time signatures glyphs for staffs
// See tables.js for the internal time signatures
// representation




var assertIsValidFraction = function assertIsValidFraction(timeSpec) {
  var numbers = timeSpec.split('/').filter(function (number) {
    return number !== '';
  });

  if (numbers.length !== 2) {
    throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadTimeSignature', "Invalid time spec: ".concat(timeSpec, ". Must be in the form \"<numerator>/<denominator>\""));
  }

  numbers.forEach(function (number) {
    if (isNaN(Number(number))) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadTimeSignature', "Invalid time spec: ".concat(timeSpec, ". Must contain two valid numbers."));
    }
  });
};

var TimeSignature =
/*#__PURE__*/
function (_StaveModifier) {
  _inherits(TimeSignature, _StaveModifier);

  _createClass(TimeSignature, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'timesignatures';
    }
  }, {
    key: "glyphs",
    get: function get() {
      return {
        'C': {
          code: 'timeSigCommon',
          point: 40,
          line: 2
        },
        'C|': {
          code: 'timeSigCutCommon',
          point: 40,
          line: 2
        }
      };
    }
  }]);

  function TimeSignature() {
    var _this;

    var timeSpec = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
    var customPadding = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 15;
    var validate_args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;

    _classCallCheck(this, TimeSignature);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(TimeSignature).call(this));

    _this.setAttribute('type', 'TimeSignature');

    _this.validate_args = validate_args;
    if (timeSpec === null) return _possibleConstructorReturn(_this);
    var padding = customPadding;
    _this.point = _this.musicFont.lookupMetric('digits.point');

    var fontLineShift = _this.musicFont.lookupMetric('digits.shiftLine', 0);

    _this.topLine = 2 + fontLineShift;
    _this.bottomLine = 4 + fontLineShift;

    _this.setPosition(_stavemodifier__WEBPACK_IMPORTED_MODULE_2__["StaveModifier"].Position.BEGIN);

    _this.setTimeSig(timeSpec);

    _this.setWidth(_this.timeSig.glyph.getMetrics().width);

    _this.setPadding(padding);

    return _this;
  }

  _createClass(TimeSignature, [{
    key: "getCategory",
    value: function getCategory() {
      return TimeSignature.CATEGORY;
    }
  }, {
    key: "parseTimeSpec",
    value: function parseTimeSpec(timeSpec) {
      if (timeSpec === 'C' || timeSpec === 'C|') {
        var _TimeSignature$glyphs = TimeSignature.glyphs[timeSpec],
            line = _TimeSignature$glyphs.line,
            code = _TimeSignature$glyphs.code,
            point = _TimeSignature$glyphs.point;
        return {
          line: line,
          num: false,
          glyph: new _glyph__WEBPACK_IMPORTED_MODULE_1__["Glyph"](code, point)
        };
      }

      if (this.validate_args) {
        assertIsValidFraction(timeSpec);
      }

      var _timeSpec$split$map = timeSpec.split('/').map(function (number) {
        return number.split('');
      }),
          _timeSpec$split$map2 = _slicedToArray(_timeSpec$split$map, 2),
          topDigits = _timeSpec$split$map2[0],
          botDigits = _timeSpec$split$map2[1];

      return {
        num: true,
        glyph: this.makeTimeSignatureGlyph(topDigits, botDigits)
      };
    }
  }, {
    key: "makeTimeSignatureGlyph",
    value: function makeTimeSignatureGlyph(topDigits, botDigits) {
      var glyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__["Glyph"]('timeSig0', this.point);
      glyph.topGlyphs = [];
      glyph.botGlyphs = [];
      var topWidth = 0;

      for (var i = 0; i < topDigits.length; ++i) {
        var num = topDigits[i];
        var topGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__["Glyph"]('timeSig' + num, this.point);
        glyph.topGlyphs.push(topGlyph);
        topWidth += topGlyph.getMetrics().width;
      }

      var botWidth = 0;

      for (var _i2 = 0; _i2 < botDigits.length; ++_i2) {
        var _num = botDigits[_i2];
        var botGlyph = new _glyph__WEBPACK_IMPORTED_MODULE_1__["Glyph"]('timeSig' + _num, this.point);
        glyph.botGlyphs.push(botGlyph);
        botWidth += botGlyph.getMetrics().width;
      }

      var width = topWidth > botWidth ? topWidth : botWidth;
      var xMin = glyph.getMetrics().x_min;

      glyph.getMetrics = function () {
        return {
          x_min: xMin,
          x_max: xMin + width,
          width: width
        };
      };

      var topStartX = (width - topWidth) / 2.0;
      var botStartX = (width - botWidth) / 2.0;
      var that = this;

      glyph.renderToStave = function renderToStave(x) {
        var start_x = x + topStartX;

        for (var _i3 = 0; _i3 < this.topGlyphs.length; ++_i3) {
          var _glyph = this.topGlyphs[_i3];
          _glyph__WEBPACK_IMPORTED_MODULE_1__["Glyph"].renderOutline(this.context, _glyph.metrics.outline, _glyph.scale, start_x + _glyph.x_shift, this.stave.getYForLine(that.topLine));
          start_x += _glyph.getMetrics().width;
        }

        start_x = x + botStartX;

        for (var _i4 = 0; _i4 < this.botGlyphs.length; ++_i4) {
          var _glyph2 = this.botGlyphs[_i4];
          that.placeGlyphOnLine(_glyph2, this.stave, _glyph2.line);
          _glyph__WEBPACK_IMPORTED_MODULE_1__["Glyph"].renderOutline(this.context, _glyph2.metrics.outline, _glyph2.scale, start_x + _glyph2.x_shift, this.stave.getYForLine(that.bottomLine));
          start_x += _glyph2.getMetrics().width;
        }
      };

      return glyph;
    }
  }, {
    key: "getTimeSig",
    value: function getTimeSig() {
      return this.timeSig;
    }
  }, {
    key: "setTimeSig",
    value: function setTimeSig(timeSpec) {
      this.timeSig = this.parseTimeSpec(timeSpec);
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      if (!this.x) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('TimeSignatureError', "Can't draw time signature without x.");
      }

      if (!this.stave) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('TimeSignatureError', "Can't draw time signature without stave.");
      }

      this.setRendered();
      this.timeSig.glyph.setStave(this.stave);
      this.timeSig.glyph.setContext(this.stave.context);
      this.placeGlyphOnLine(this.timeSig.glyph, this.stave, this.timeSig.line);
      this.timeSig.glyph.renderToStave(this.x);
    }
  }]);

  return TimeSignature;
}(_stavemodifier__WEBPACK_IMPORTED_MODULE_2__["StaveModifier"]);

/***/ }),

/***/ "./src/timesignote.js":
/*!****************************!*\
  !*** ./src/timesignote.js ***!
  \****************************/
/*! exports provided: TimeSigNote */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeSigNote", function() { return TimeSigNote; });
/* harmony import */ var _note__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./note */ "./src/note.js");
/* harmony import */ var _timesignature__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./timesignature */ "./src/timesignature.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }

function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author Taehoon Moon 2014


var TimeSigNote =
/*#__PURE__*/
function (_Note) {
  _inherits(TimeSigNote, _Note);

  function TimeSigNote(timeSpec, customPadding) {
    var _this;

    _classCallCheck(this, TimeSigNote);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(TimeSigNote).call(this, {
      duration: 'b'
    }));

    _this.setAttribute('type', 'TimeSigNote');

    var timeSignature = new _timesignature__WEBPACK_IMPORTED_MODULE_1__["TimeSignature"](timeSpec, customPadding);
    _this.timeSig = timeSignature.getTimeSig();

    _this.setWidth(_this.timeSig.glyph.getMetrics().width); // Note properties


    _this.ignore_ticks = true;
    return _this;
  }

  _createClass(TimeSigNote, [{
    key: "getBoundingBox",
    value: function getBoundingBox() {
      return _get(_getPrototypeOf(TimeSigNote.prototype), "getBoundingBox", this).call(this);
    }
  }, {
    key: "addToModifierContext",
    value: function addToModifierContext() {
      /* overridden to ignore */
      return this;
    }
  }, {
    key: "preFormat",
    value: function preFormat() {
      this.setPreFormatted(true);
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      this.stave.checkContext();
      this.setRendered();

      if (!this.timeSig.glyph.getContext()) {
        this.timeSig.glyph.setContext(this.context);
      }

      this.timeSig.glyph.setStave(this.stave);
      this.timeSig.glyph.setYShift(this.stave.getYForLine(this.timeSig.line) - this.stave.getYForGlyphs());
      this.timeSig.glyph.renderToStave(this.getAbsoluteX());
    }
  }]);

  return TimeSigNote;
}(_note__WEBPACK_IMPORTED_MODULE_0__["Note"]);

/***/ }),

/***/ "./src/tremolo.js":
/*!************************!*\
  !*** ./src/tremolo.js ***!
  \************************/
/*! exports provided: Tremolo */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Tremolo", function() { return Tremolo; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
/* harmony import */ var _gracenote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./gracenote */ "./src/gracenote.js");
/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stem */ "./src/stem.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author: Mike Corrigan <corrigan@gmail.com>
//
// This class implements tremolo notation.





var Tremolo =
/*#__PURE__*/
function (_Modifier) {
  _inherits(Tremolo, _Modifier);

  _createClass(Tremolo, null, [{
    key: "CATEGORY",
    get: function get() {
      return 'tremolo';
    }
  }]);

  function Tremolo(num) {
    var _this;

    _classCallCheck(this, Tremolo);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Tremolo).call(this));

    _this.setAttribute('type', 'Tremolo');

    _this.num = num;
    _this.note = null;
    _this.index = null;
    _this.position = _modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"].Position.CENTER;
    _this.code = 'tremolo1';
    return _this;
  }

  _createClass(Tremolo, [{
    key: "getCategory",
    value: function getCategory() {
      return Tremolo.CATEGORY;
    }
  }, {
    key: "draw",
    value: function draw() {
      this.checkContext();

      if (!(this.note && this.index != null)) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoAttachedNote', "Can't draw Tremolo without a note and index.");
      }

      this.setRendered();
      var stemDirection = this.note.getStemDirection();
      var start = this.note.getModifierStartXY(this.position, this.index);
      var x = start.x;
      var isGraceNote = this.note.getCategory() === 'gracenotes';
      var scale = isGraceNote ? _gracenote__WEBPACK_IMPORTED_MODULE_3__["GraceNote"].SCALE : 1;
      var category = "tremolo.".concat(isGraceNote ? 'grace' : 'default');
      this.y_spacing = this.musicFont.lookupMetric("".concat(category, ".spacing")) * stemDirection;
      var height = this.num * this.y_spacing;
      var y = this.note.stem.getExtents().baseY - height;

      if (stemDirection < 0) {
        y += this.musicFont.lookupMetric("".concat(category, ".offsetYStemDown")) * scale;
      } else {
        y += this.musicFont.lookupMetric("".concat(category, ".offsetYStemUp")) * scale;
      }

      this.font = {
        family: 'Arial',
        size: 16 * scale,
        weight: ''
      };
      this.render_options = {
        font_scale: this.musicFont.lookupMetric("".concat(category, ".point")),
        stroke_px: 3,
        stroke_spacing: 10 * scale
      };
      x += this.musicFont.lookupMetric("".concat(category, ".offsetXStem").concat(stemDirection === _stem__WEBPACK_IMPORTED_MODULE_4__["Stem"].UP ? 'Up' : 'Down'));

      for (var i = 0; i < this.num; ++i) {
        _glyph__WEBPACK_IMPORTED_MODULE_2__["Glyph"].renderGlyph(this.context, x, y, this.render_options.font_scale, this.code, {
          category: category
        });
        y += this.y_spacing;
      }
    }
  }]);

  return Tremolo;
}(_modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"]);

/***/ }),

/***/ "./src/tuning.js":
/*!***********************!*\
  !*** ./src/tuning.js ***!
  \***********************/
/*! exports provided: Tuning */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Tuning", function() { return Tuning; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// This class implements varies types of tunings for tablature.


var Tuning =
/*#__PURE__*/
function () {
  _createClass(Tuning, null, [{
    key: "names",
    get: function get() {
      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'
      };
    }
  }]);

  function Tuning() {
    var tuningString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2';

    _classCallCheck(this, Tuning);

    // Default to standard tuning.
    this.setTuning(tuningString);
  }

  _createClass(Tuning, [{
    key: "noteToInteger",
    value: function noteToInteger(noteString) {
      return _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].keyProperties(noteString).int_value;
    }
  }, {
    key: "setTuning",
    value: function setTuning(noteString) {
      if (Tuning.names[noteString]) {
        noteString = Tuning.names[noteString];
      }

      this.tuningString = noteString;
      this.tuningValues = [];
      this.numStrings = 0;
      var keys = noteString.split(/\s*,\s*/);

      if (keys.length === 0) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', 'Invalid tuning string: ' + noteString);
      }

      this.numStrings = keys.length;

      for (var i = 0; i < this.numStrings; ++i) {
        this.tuningValues[i] = this.noteToInteger(keys[i]);
      }
    }
  }, {
    key: "getValueForString",
    value: function getValueForString(stringNum) {
      var s = parseInt(stringNum, 10);

      if (s < 1 || s > this.numStrings) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', "String number must be between 1 and ".concat(this.numStrings, ":").concat(stringNum));
      }

      return this.tuningValues[s - 1];
    }
  }, {
    key: "getValueForFret",
    value: function getValueForFret(fretNum, stringNum) {
      var stringValue = this.getValueForString(stringNum);
      var f = parseInt(fretNum, 10);

      if (f < 0) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArguments', 'Fret number must be 0 or higher: ' + fretNum);
      }

      return stringValue + f;
    }
  }, {
    key: "getNoteForFret",
    value: function getNoteForFret(fretNum, stringNum) {
      var noteValue = this.getValueForFret(fretNum, stringNum);
      var octave = Math.floor(noteValue / 12);
      var value = noteValue % 12;
      return _tables__WEBPACK_IMPORTED_MODULE_1__["Flow"].integerToNote(value) + '/' + octave;
    }
  }]);

  return Tuning;
}();

/***/ }),

/***/ "./src/tuplet.js":
/*!***********************!*\
  !*** ./src/tuplet.js ***!
  \***********************/
/*! exports provided: Tuplet */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Tuplet", function() { return Tuplet; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./formatter */ "./src/formatter.js");
/* harmony import */ var _glyph__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./glyph */ "./src/glyph.js");
/* harmony import */ var _stem__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stem */ "./src/stem.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://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.<Vex.Flow.StaveNote>} 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 Tuplet =
/*#__PURE__*/
function (_Element) {
  _inherits(Tuplet, _Element);

  _createClass(Tuplet, null, [{
    key: "LOCATION_TOP",
    get: function get() {
      return 1;
    }
  }, {
    key: "LOCATION_BOTTOM",
    get: function get() {
      return -1;
    }
  }, {
    key: "NESTING_OFFSET",
    get: function get() {
      return 15;
    }
  }]);

  function Tuplet(notes, options) {
    var _this;

    _classCallCheck(this, Tuplet);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Tuplet).call(this));

    _this.setAttribute('type', 'Tuplet');

    if (!notes || !notes.length) {
      throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('BadArguments', 'No notes provided for tuplet.');
    }

    _this.options = _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge({}, options);
    _this.notes = notes;
    _this.num_notes = 'num_notes' in _this.options ? _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 ('bracketed' in _this.options) {
      _this.bracketed = _this.options.bracketed;
    } else {
      _this.bracketed = notes.some(function (note) {
        return note.beam === null;
      });
    }

    _this.ratioed = 'ratioed' in _this.options ? _this.options.ratioed : Math.abs(_this.notes_occupied - _this.num_notes) > 1;
    _this.point = _this.musicFont.lookupMetric('digits.tupletPoint');
    _this.y_pos = 16;
    _this.x_pos = 100;
    _this.width = 200;
    _this.location = _this.options.location || Tuplet.LOCATION_TOP;
    _formatter__WEBPACK_IMPORTED_MODULE_2__["Formatter"].AlignRestsToNotes(notes, true, true);

    _this.resolveGlyphs();

    _this.attach();

    return _this;
  }

  _createClass(Tuplet, [{
    key: "attach",
    value: function attach() {
      for (var i = 0; i < this.notes.length; i++) {
        var note = this.notes[i];
        note.setTuplet(this);
      }
    }
  }, {
    key: "detach",
    value: function detach() {
      for (var i = 0; i < this.notes.length; i++) {
        var note = this.notes[i];
        note.resetTuplet(this);
      }
    }
    /**
     * Set whether or not the bracket is drawn.
     */

  }, {
    key: "setBracketed",
    value: function setBracketed(bracketed) {
      this.bracketed = !!bracketed;
      return this;
    }
    /**
     * Set whether or not the ratio is shown.
     */

  }, {
    key: "setRatioed",
    value: function setRatioed(ratioed) {
      this.ratioed = !!ratioed;
      return this;
    }
    /**
     * Set the tuplet to be displayed either on the top or bottom of the stave
     */

  }, {
    key: "setTupletLocation",
    value: function setTupletLocation(location) {
      if (!location) {
        location = Tuplet.LOCATION_TOP;
      } else if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('BadArgument', 'Invalid tuplet location: ' + location);
      }

      this.location = location;
      return this;
    }
  }, {
    key: "getNotes",
    value: function getNotes() {
      return this.notes;
    }
  }, {
    key: "getNoteCount",
    value: function getNoteCount() {
      return this.num_notes;
    }
  }, {
    key: "beatsOccupiedDeprecationWarning",
    value: function beatsOccupiedDeprecationWarning() {
      var msg = ['beats_occupied has been deprecated as an ', 'option for tuplets. Please use notes_occupied ', 'instead. Calls to getBeatsOccupied and ', 'setBeatsOccupied should now be routed to ', 'getNotesOccupied and setNotesOccupied instead'].join('');

      if (console && console.warn) {
        // eslint-disable-line no-console
        console.warn(msg); // eslint-disable-line no-console
      } else if (console) {
        console.log(msg); // eslint-disable-line no-console
      }
    }
  }, {
    key: "getBeatsOccupied",
    value: function getBeatsOccupied() {
      this.beatsOccupiedDeprecationWarning();
      return this.getNotesOccupied();
    }
  }, {
    key: "setBeatsOccupied",
    value: function setBeatsOccupied(beats) {
      this.beatsOccupiedDeprecationWarning();
      return this.setNotesOccupied(beats);
    }
  }, {
    key: "getNotesOccupied",
    value: function getNotesOccupied() {
      return this.notes_occupied;
    }
  }, {
    key: "setNotesOccupied",
    value: function setNotesOccupied(notes) {
      this.detach();
      this.notes_occupied = notes;
      this.resolveGlyphs();
      this.attach();
    }
  }, {
    key: "resolveGlyphs",
    value: function resolveGlyphs() {
      this.numerator_glyphs = [];
      var n = this.num_notes;

      while (n >= 1) {
        this.numerator_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_3__["Glyph"]('timeSig' + n % 10, this.point));
        n = parseInt(n / 10, 10);
      }

      this.denom_glyphs = [];
      n = this.notes_occupied;

      while (n >= 1) {
        this.denom_glyphs.unshift(new _glyph__WEBPACK_IMPORTED_MODULE_3__["Glyph"]('timeSig' + n % 10, this.point));
        n = parseInt(n / 10, 10);
      }
    } // determine how many tuplets are nested within this tuplet
    // on the same side (above/below), to calculate a y
    // offset for this tuplet:

  }, {
    key: "getNestedTupletCount",
    value: function getNestedTupletCount() {
      var location = this.location;
      var first_note = this.notes[0];
      var maxTupletCount = countTuplets(first_note, location);
      var 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.tupletStack.filter(function (tuplet) {
          return tuplet.location === location;
        }).length;
      }

      this.notes.forEach(function (note) {
        var tupletCount = countTuplets(note, location);
        maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;
        minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;
      });
      return maxTupletCount - minTupletCount;
    } // determine the y position of the tuplet:

  }, {
    key: "getYPosition",
    value: function getYPosition() {
      // offset the tuplet for any nested tuplets between
      // it and the notes:
      var nested_tuplet_y_offset = this.getNestedTupletCount() * Tuplet.NESTING_OFFSET * -this.location; // offset the tuplet for any manual y_offset:

      var 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

      var first_note = this.notes[0];
      var y_pos;

      if (this.location === Tuplet.LOCATION_TOP) {
        y_pos = first_note.getStave().getYForLine(0) - 15; // y_pos = first_note.getStemExtents().topY - 10;

        for (var i = 0; i < this.notes.length; ++i) {
          var top_y = this.notes[i].getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_4__["Stem"].UP ? this.notes[i].getStemExtents().topY - 10 : this.notes[i].getStemExtents().baseY - 20;

          if (top_y < y_pos) {
            y_pos = top_y;
          }
        }
      } else {
        y_pos = first_note.getStave().getYForLine(4) + 20;

        for (var _i = 0; _i < this.notes.length; ++_i) {
          var bottom_y = this.notes[_i].getStemDirection() === _stem__WEBPACK_IMPORTED_MODULE_4__["Stem"].UP ? this.notes[_i].getStemExtents().baseY + 20 : this.notes[_i].getStemExtents().topY + 10;

          if (bottom_y > y_pos) {
            y_pos = bottom_y;
          }
        }
      }

      return y_pos + nested_tuplet_y_offset + y_offset;
    }
  }, {
    key: "draw",
    value: function draw() {
      var _this2 = this;

      this.checkContext();
      this.setRendered(); // determine x value of left bound of tuplet

      var first_note = this.notes[0];
      var 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();

      var addGlyphWidth = function addGlyphWidth(width, glyph) {
        return width + glyph.getMetrics().width;
      }; // calculate total width of tuplet notation


      var width = this.numerator_glyphs.reduce(addGlyphWidth, 0);

      if (this.ratioed) {
        width = this.denom_glyphs.reduce(addGlyphWidth, width);
        width += this.point * 0.32;
      }

      var notation_center_x = this.x_pos + this.width / 2;
      var notation_start_x = notation_center_x - width / 2; // draw bracket if the tuplet is not beamed

      if (this.bracketed) {
        var line_width = this.width / 2 - width / 2 - 5; // only draw the bracket if it has positive length

        if (line_width > 0) {
          this.context.fillRect(this.x_pos, this.y_pos, line_width, 1);
          this.context.fillRect(this.x_pos + this.width / 2 + width / 2 + 5, this.y_pos, line_width, 1);
          this.context.fillRect(this.x_pos, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM), 1, this.location * 10);
          this.context.fillRect(this.x_pos + this.width, this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM), 1, this.location * 10);
        }
      } // draw numerator glyphs


      var shiftY = this.musicFont.lookupMetric('digits.shiftY', 0);
      var x_offset = 0;
      this.numerator_glyphs.forEach(function (glyph) {
        glyph.render(_this2.context, notation_start_x + x_offset, _this2.y_pos + _this2.point / 3 - 2 + shiftY);
        x_offset += glyph.getMetrics().width;
      }); // display colon and denominator if the ratio is to be shown

      if (this.ratioed) {
        var colon_x = notation_start_x + x_offset + this.point * 0.16;
        var colon_radius = this.point * 0.06;
        this.context.beginPath();
        this.context.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, true);
        this.context.closePath();
        this.context.fill();
        this.context.beginPath();
        this.context.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, true);
        this.context.closePath();
        this.context.fill();
        x_offset += this.point * 0.32;
        this.denom_glyphs.forEach(function (glyph) {
          glyph.render(_this2.context, notation_start_x + x_offset, _this2.y_pos + _this2.point / 3 - 2 + shiftY);
          x_offset += glyph.getMetrics().width;
        });
      }
    }
  }]);

  return Tuplet;
}(_element__WEBPACK_IMPORTED_MODULE_1__["Element"]);

/***/ }),

/***/ "./src/vex.js":
/*!********************!*\
  !*** ./src/vex.js ***!
  \********************/
/*! exports provided: Vex */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vex", function() { return Vex; });
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }

function isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }

function _construct(Parent, args, Class) { if (isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }

function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// This file implements utility methods used by the rest of the VexFlow
// codebase.
//

/* eslint max-classes-per-file: "off" */
var Vex = function Vex() {}; // Default log function sends all arguments to console.


Vex.L = function (block, args) {
  if (!args) return;
  var line = Array.prototype.slice.call(args).join(' ');
  window.console.log(block + ': ' + line);
};

Vex.MakeException = function (name) {
  var exception =
  /*#__PURE__*/
  function (_Error) {
    _inherits(exception, _Error);

    function exception(message, data) {
      var _this;

      _classCallCheck(this, exception);

      _this = _possibleConstructorReturn(this, _getPrototypeOf(exception).call(this, message));
      _this.name = name;
      _this.message = message;
      _this.data = data;
      return _this;
    }

    return exception;
  }(_wrapNativeSuper(Error));

  return exception;
}; // Default runtime exception.


var RuntimeError =
/*#__PURE__*/
function () {
  function RuntimeError(code, message) {
    _classCallCheck(this, RuntimeError);

    this.code = code;
    this.message = message;
  }

  _createClass(RuntimeError, [{
    key: "toString",
    value: function toString() {
      return '[RuntimeError] ' + this.code + ':' + this.message;
    }
  }]);

  return RuntimeError;
}(); // Shortcut method for `RuntimeError`.


Vex.RuntimeError = RuntimeError;
Vex.RERR = Vex.RuntimeError; // Merge `destination` hash with `source` hash, overwriting like keys
// in `source` if necessary.

Vex.Merge = function (destination, source) {
  for (var property in source) {
    // eslint-disable-line guard-for-in
    destination[property] = source[property];
  }

  return destination;
}; // DEPRECATED. Use `Math.*`.


Vex.Min = Math.min;
Vex.Max = Math.max;

Vex.forEach = function (a, fn) {
  for (var i = 0; i < a.length; i++) {
    fn(a[i], i);
  }
}; // Round number to nearest fractional value (`.5`, `.25`, etc.)


Vex.RoundN = function (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.


Vex.MidLine = function (a, b) {
  var mid_line = b + (a - b) / 2;

  if (mid_line % 2 > 0) {
    mid_line = Vex.RoundN(mid_line * 10, 5) / 10;
  }

  return mid_line;
}; // Take `arr` and return a new list consisting of the sorted, unique,
// contents of arr. Does not modify `arr`.


Vex.SortAndUnique = function (arr, cmp, eq) {
  if (arr.length > 1) {
    var newArr = [];
    var last;
    arr.sort(cmp);

    for (var 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 `a` contains `obj`.


Vex.Contains = function (a, obj) {
  var i = a.length;

  while (i--) {
    if (a[i] === obj) {
      return true;
    }
  }

  return false;
}; // Get the 2D Canvas context from DOM element `canvas_sel`.


Vex.getCanvasContext = function (canvas_sel) {
  if (!canvas_sel) {
    throw new Vex.RERR('BadArgument', 'Invalid canvas selector: ' + canvas_sel);
  }

  var canvas = document.getElementById(canvas_sel);

  if (!(canvas && canvas.getContext)) {
    throw new Vex.RERR('UnsupportedBrowserError', 'This browser does not support HTML5 Canvas');
  }

  return canvas.getContext('2d');
}; // Draw a tiny dot marker on the specified canvas. A great debugging aid.
//
// `ctx`: Canvas context.
// `x`, `y`: Dot coordinates.


Vex.drawDot = function (ctx, x, y) {
  var color = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '#55';
  ctx.save();
  ctx.setFillStyle(color); // draw a circle

  ctx.beginPath();
  ctx.arc(x, y, 3, 0, Math.PI * 2, true);
  ctx.closePath();
  ctx.fill();
  ctx.restore();
}; // Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds.


Vex.BM = function (s, f) {
  var start_time = new Date().getTime();
  f();
  var elapsed = new Date().getTime() - start_time;
  Vex.L(s + elapsed + 'ms');
}; // Get stack trace.


Vex.StackTrace = function () {
  var err = new Error();
  return err.stack;
}; // Dump warning to console.


Vex.W = function () {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  var line = args.join(' ');
  window.console.log('Warning: ', line, Vex.StackTrace());
}; // Used by various classes (e.g., SVGContext) to provide a
// unique prefix to element names (or other keys in shared namespaces).


Vex.Prefix = function (text) {
  return Vex.Prefix.prefix + text;
};

Vex.Prefix.prefix = 'vf-';


/***/ }),

/***/ "./src/vibrato.js":
/*!************************!*\
  !*** ./src/vibrato.js ***!
  \************************/
/*! exports provided: Vibrato */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Vibrato", function() { return Vibrato; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _modifier__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifier */ "./src/modifier.js");
/* harmony import */ var _bend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bend */ "./src/bend.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
// This class implements vibratos.



var Vibrato =
/*#__PURE__*/
function (_Modifier) {
  _inherits(Vibrato, _Modifier);

  _createClass(Vibrato, null, [{
    key: "format",
    // ## Static Methods
    // Arrange vibratos inside a `ModifierContext`.
    value: function format(vibratos, state, context) {
      if (!vibratos || vibratos.length === 0) return false; // Vibratos are always on top.

      var text_line = state.top_text_line;
      var width = 0;
      var shift = state.right_shift - 7; // If there's a bend, drop the text line

      var bends = context.getModifiers(_bend__WEBPACK_IMPORTED_MODULE_2__["Bend"].CATEGORY);

      if (bends && bends.length > 0) {
        text_line--;
      } // Format Vibratos


      for (var i = 0; i < vibratos.length; ++i) {
        var vibrato = vibratos[i];
        vibrato.setXShift(shift);
        vibrato.setTextLine(text_line);
        width += vibrato.getWidth();
        shift += width;
      }

      state.right_shift += width;
      state.top_text_line += 1;
      return true;
    } // ## Prototype Methods

  }, {
    key: "CATEGORY",
    get: function get() {
      return 'vibratos';
    }
  }]);

  function Vibrato() {
    var _this;

    _classCallCheck(this, Vibrato);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Vibrato).call(this));

    _this.setAttribute('type', 'Vibrato');

    _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);

    return _this;
  }

  _createClass(Vibrato, [{
    key: "getCategory",
    value: function getCategory() {
      return Vibrato.CATEGORY;
    }
  }, {
    key: "setHarsh",
    value: function setHarsh(harsh) {
      this.render_options.harsh = harsh;
      return this;
    }
  }, {
    key: "setVibratoWidth",
    value: function setVibratoWidth(width) {
      this.render_options.vibrato_width = width;
      this.setWidth(width);
      return this;
    }
  }, {
    key: "draw",
    value: function draw() {
      var ctx = this.checkContext();

      if (!this.note) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoNoteForVibrato', "Can't draw vibrato without an attached note.");
      }

      this.setRendered();
      var start = this.note.getModifierStartXY(_modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"].Position.RIGHT, this.index);
      var vx = start.x + this.x_shift;
      var vy = this.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)

  }], [{
    key: "renderVibrato",
    value: function renderVibrato(ctx, x, y, opts) {
      var harsh = opts.harsh,
          vibrato_width = opts.vibrato_width,
          wave_width = opts.wave_width,
          wave_girth = opts.wave_girth,
          wave_height = opts.wave_height;
      var num_waves = vibrato_width / wave_width;
      ctx.beginPath();
      var 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();
      }
    }
  }]);

  return Vibrato;
}(_modifier__WEBPACK_IMPORTED_MODULE_1__["Modifier"]);

/***/ }),

/***/ "./src/vibratobracket.js":
/*!*******************************!*\
  !*** ./src/vibratobracket.js ***!
  \*******************************/
/*! exports provided: VibratoBracket */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VibratoBracket", function() { return VibratoBracket; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _vibrato__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./vibrato */ "./src/vibrato.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
// Author: Balazs Forian-Szabo
//
// ## Description
//
// This file implements `VibratoBrackets`
// that renders vibrato effect between two notes.


 // To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`.

function L() {
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  if (VibratoBracket.DEBUG) _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].L('Vex.Flow.VibratoBracket', args);
}

var VibratoBracket =
/*#__PURE__*/
function (_Element) {
  _inherits(VibratoBracket, _Element);

  // bracket_data = {
  //   start: Vex.Flow.Note (optional)
  //   stop: Vex.Flow.Note (optional)
  // };
  // Either the stop or start note must be set, or both of them.
  // A null value for the start or stop note indicates that the vibrato
  // is drawn from the beginning or until the end of the stave accordingly.
  function VibratoBracket(bracket_data) {
    var _this;

    _classCallCheck(this, VibratoBracket);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(VibratoBracket).call(this));

    _this.setAttribute('type', 'VibratoBracket');

    _this.start = bracket_data.start;
    _this.stop = bracket_data.stop;
    _this.line = 1;
    _this.render_options = {
      harsh: false,
      wave_height: 6,
      wave_width: 4,
      wave_girth: 2
    };
    return _this;
  } // Set line position of the vibrato bracket


  _createClass(VibratoBracket, [{
    key: "setLine",
    value: function setLine(line) {
      this.line = line;
      return this;
    }
  }, {
    key: "setHarsh",
    value: function setHarsh(harsh) {
      this.render_options.harsh = harsh;
      return this;
    } // Draw the vibrato bracket on the rendering context

  }, {
    key: "draw",
    value: function draw() {
      var ctx = this.context;
      this.setRendered();
      var y = this.start ? this.start.getStave().getYForTopText(this.line) : this.stop.getStave().getYForTopText(this.line); // If start note is not set then vibrato will be drawn
      // from the beginning of the stave

      var start_x = this.start ? this.start.getAbsoluteX() : this.stop.getStave().getTieStartX(); // If stop note is not set then vibrato will be drawn
      // until the end of the stave

      var stop_x = this.stop ? this.stop.getAbsoluteX() - this.stop.getWidth() - 5 : this.start.getStave().getTieEndX() - 10;
      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_2__["Vibrato"].renderVibrato(ctx, start_x, y, this.render_options);
    }
  }]);

  return VibratoBracket;
}(_element__WEBPACK_IMPORTED_MODULE_1__["Element"]);

/***/ }),

/***/ "./src/voice.js":
/*!**********************!*\
  !*** ./src/voice.js ***!
  \**********************/
/*! exports provided: Voice */
/***/ (function(module, __webpack_exports__, __webpack_require__) {

"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Voice", function() { return Voice; });
/* harmony import */ var _vex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./vex */ "./src/vex.js");
/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element */ "./src/element.js");
/* harmony import */ var _tables__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tables */ "./src/tables.js");
/* harmony import */ var _fraction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fraction */ "./src/fraction.js");
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }

function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }

function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }

function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }

function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }

function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }

function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }

// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.
//
// ## Description
//
// This file implements the main Voice class. It's mainly a container
// object to group `Tickables` for formatting.




var Voice =
/*#__PURE__*/
function (_Element) {
  _inherits(Voice, _Element);

  _createClass(Voice, null, [{
    key: "Mode",
    // 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.
    get: function get() {
      return {
        STRICT: 1,
        SOFT: 2,
        FULL: 3
      };
    }
  }]);

  function Voice(time, options) {
    var _this;

    _classCallCheck(this, Voice);

    _this = _possibleConstructorReturn(this, _getPrototypeOf(Voice).call(this));

    _this.setAttribute('type', 'Voice');

    _this.options = _objectSpread({
      softmaxFactor: 100
    }, options); // Time signature shortcut: "4/4", "3/8", etc.

    if (typeof time === 'string') {
      var match = time.match(/(\d+)\/(\d+)/);

      if (match) {
        time = {
          num_beats: match[1],
          beat_value: match[2],
          resolution: _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].RESOLUTION
        };
      }
    } // Default time sig is 4/4


    _this.time = _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].Merge({
      num_beats: 4,
      beat_value: 4,
      resolution: _tables__WEBPACK_IMPORTED_MODULE_2__["Flow"].RESOLUTION
    }, time); // Recalculate total ticks.

    _this.totalTicks = new _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"](_this.time.num_beats * (_this.time.resolution / _this.time.beat_value), 1);
    _this.resolutionMultiplier = 1; // Set defaults

    _this.tickables = [];
    _this.ticksUsed = new _fraction__WEBPACK_IMPORTED_MODULE_3__["Fraction"](0, 1);
    _this.smallestTickCount = _this.totalTicks.clone();
    _this.largestTickWidth = 0;
    _this.stave = null; // Do we care about strictly timed notes

    _this.mode = Voice.Mode.STRICT; // This must belong to a VoiceGroup

    _this.voiceGroup = null;
    return _this;
  } // Get the total ticks in the voice


  _createClass(Voice, [{
    key: "getTotalTicks",
    value: function getTotalTicks() {
      return this.totalTicks;
    } // Get the total ticks used in the voice by all the tickables

  }, {
    key: "getTicksUsed",
    value: function getTicksUsed() {
      return this.ticksUsed;
    } // Get the largest width of all the tickables

  }, {
    key: "getLargestTickWidth",
    value: function getLargestTickWidth() {
      return this.largestTickWidth;
    } // Get the tick count for the shortest tickable

  }, {
    key: "getSmallestTickCount",
    value: function getSmallestTickCount() {
      return this.smallestTickCount;
    } // Get the tickables in the voice

  }, {
    key: "getTickables",
    value: function getTickables() {
      return this.tickables;
    } // Get/set the voice mode, use a value from `Voice.Mode`

  }, {
    key: "getMode",
    value: function getMode() {
      return this.mode;
    }
  }, {
    key: "setMode",
    value: function setMode(mode) {
      this.mode = mode;
      return this;
    } // Get the resolution multiplier for the voice

  }, {
    key: "getResolutionMultiplier",
    value: function getResolutionMultiplier() {
      return this.resolutionMultiplier;
    } // Get the actual tick resolution for the voice

  }, {
    key: "getActualResolution",
    value: function getActualResolution() {
      return this.resolutionMultiplier * this.time.resolution;
    } // Set the voice's stave

  }, {
    key: "setStave",
    value: function setStave(stave) {
      this.stave = stave;
      this.boundingBox = null; // Reset bounding box so we can reformat

      return this;
    } // Get the bounding box for the voice

  }, {
    key: "getBoundingBox",
    value: function getBoundingBox() {
      var stave;
      var boundingBox;
      var bb;
      var i;

      if (!this.boundingBox) {
        if (!this.stave) throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoStave', "Can't get bounding box without stave.");
        stave = this.stave;
        boundingBox = null;

        for (i = 0; i < this.tickables.length; ++i) {
          this.tickables[i].setStave(stave);
          bb = this.tickables[i].getBoundingBox();
          if (!bb) continue;
          boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;
        }

        this.boundingBox = boundingBox;
      }

      return this.boundingBox;
    } // Every tickable must be associated with a voiceGroup. This allows formatters
    // and preformatters to associate them with the right modifierContexts.

  }, {
    key: "getVoiceGroup",
    value: function getVoiceGroup() {
      if (!this.voiceGroup) {
        throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('NoVoiceGroup', 'No voice group for voice.');
      }

      return this.voiceGroup;
    } // Set the voice group

  }, {
    key: "setVoiceGroup",
    value: function setVoiceGroup(g) {
      this.voiceGroup = g;
      return this;
    } // Set the voice mode to strict or soft

  }, {
    key: "setStrict",
    value: function setStrict(strict) {
      this.mode = strict ? Voice.Mode.STRICT : Voice.Mode.SOFT;
      return this;
    } // Determine if the voice is complete according to the voice mode

  }, {
    key: "isComplete",
    value: function isComplete() {
      if (this.mode === Voice.Mode.STRICT || this.mode === Voice.Mode.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.

  }, {
    key: "setSoftmaxFactor",
    value: function setSoftmaxFactor(factor) {
      this.options.softmaxFactor = factor;
      return this;
    } // Calculate the sum of the exponents of all the ticks in this voice to use as the denominator
    // of softmax.

  }, {
    key: "reCalculateExpTicksUsed",
    value: function reCalculateExpTicksUsed() {
      var _this2 = this;

      var totalTicks = this.ticksUsed.value();

      var exp = function exp(tickable) {
        return Math.pow(_this2.options.softmaxFactor, tickable.getTicks().value() / totalTicks);
      };

      this.expTicksUsed = this.tickables.map(exp).reduce(function (a, b) {
        return a + b;
      });
      return this.expTicksUsed;
    } // Get the softmax-scaled value of a tick duration. 'tickValue' is a number.

  }, {
    key: "softmax",
    value: function softmax(tickValue) {
      var _this3 = this;

      if (!this.expTicksUsed) {
        this.reCalculateExpTicksUsed();
      }

      var totalTicks = this.ticksUsed.value();

      var exp = function exp(v) {
        return Math.pow(_this3.options.softmaxFactor, v / totalTicks);
      };

      return exp(tickValue) / this.expTicksUsed;
    } // Add a tickable to the voice

  }, {
    key: "addTickable",
    value: function addTickable(tickable) {
      if (!tickable.shouldIgnoreTicks()) {
        var ticks = tickable.getTicks(); // Update the total ticks for this line.

        this.ticksUsed.add(ticks);

        if ((this.mode === Voice.Mode.STRICT || this.mode === Voice.Mode.FULL) && this.ticksUsed.greaterThan(this.totalTicks)) {
          this.ticksUsed.subtract(ticks);
          throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RERR('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.

  }, {
    key: "addTickables",
    value: function addTickables(tickables) {
      for (var i = 0; i < tickables.length; ++i) {
        this.addTickable(tickables[i]);
      }

      return this;
    } // Preformats the voice by applying the voice's stave to each note.

  }, {
    key: "preFormat",
    value: function preFormat() {
      var _this4 = this;

      if (this.preFormatted) return this;
      this.tickables.forEach(function (tickable) {
        if (!tickable.getStave()) {
          tickable.setStave(_this4.stave);
        }
      });
      this.preFormatted = true;
      return this;
    } // 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.

  }, {
    key: "draw",
    value: function draw() {
      var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.context;
      var stave = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.stave;
      this.setRendered();
      var boundingBox = null;

      for (var i = 0; i < this.tickables.length; ++i) {
        var tickable = this.tickables[i]; // Set the stave if provided

        if (stave) tickable.setStave(stave);

        if (!tickable.getStave()) {
          throw new _vex__WEBPACK_IMPORTED_MODULE_0__["Vex"].RuntimeError('MissingStave', 'The voice cannot draw tickables without staves.');
        }

        if (i === 0) boundingBox = tickable.getBoundingBox();

        if (i > 0 && boundingBox) {
          var tickable_bb = tickable.getBoundingBox();
          if (tickable_bb) boundingBox.mergeWith(tickable_bb);
        }

        tickable.setContext(context);
        tickable.drawWithStyle();
      }

      this.boundingBox = boundingBox;
    }
  }]);

  return Voice;
}(_element__WEBPACK_IMPORTED_MODULE_1__["Element"]);

/***/ })

/******/ })["default"];
});