{"version":3,"file":"song-chords-DHLFfqFN.js","sources":["../../../node_modules/@svgdotjs/svg.js/src/utils/methods.js","../../../node_modules/@svgdotjs/svg.js/src/utils/utils.js","../../../node_modules/@svgdotjs/svg.js/src/modules/core/namespaces.js","../../../node_modules/@svgdotjs/svg.js/src/utils/window.js","../../../node_modules/@svgdotjs/svg.js/src/types/Base.js","../../../node_modules/@svgdotjs/svg.js/src/utils/adopter.js","../../../node_modules/@svgdotjs/svg.js/src/modules/optional/arrange.js","../../../node_modules/@svgdotjs/svg.js/src/modules/core/regex.js","../../../node_modules/@svgdotjs/svg.js/src/modules/optional/class.js","../../../node_modules/@svgdotjs/svg.js/src/modules/optional/css.js","../../../node_modules/@svgdotjs/svg.js/src/modules/optional/data.js","../../../node_modules/@svgdotjs/svg.js/src/modules/optional/memory.js","../../../node_modules/@svgdotjs/svg.js/src/types/Color.js","../../../node_modules/@svgdotjs/svg.js/src/types/Point.js","../../../node_modules/@svgdotjs/svg.js/src/types/Matrix.js","../../../node_modules/@svgdotjs/svg.js/src/modules/core/parser.js","../../../node_modules/@svgdotjs/svg.js/src/types/Box.js","../../../node_modules/@svgdotjs/svg.js/src/types/List.js","../../../node_modules/@svgdotjs/svg.js/src/modules/core/selector.js","../../../node_modules/@svgdotjs/svg.js/src/modules/core/event.js","../../../node_modules/@svgdotjs/svg.js/src/types/EventTarget.js","../../../node_modules/@svgdotjs/svg.js/src/modules/core/defaults.js","../../../node_modules/@svgdotjs/svg.js/src/types/SVGArray.js","../../../node_modules/@svgdotjs/svg.js/src/types/SVGNumber.js","../../../node_modules/@svgdotjs/svg.js/src/modules/core/attr.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Dom.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Element.js","../../../node_modules/@svgdotjs/svg.js/src/modules/optional/sugar.js","../../../node_modules/@svgdotjs/svg.js/src/modules/optional/transform.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Container.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Defs.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Shape.js","../../../node_modules/@svgdotjs/svg.js/src/modules/core/circled.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Ellipse.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Fragment.js","../../../node_modules/@svgdotjs/svg.js/src/modules/core/gradiented.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Gradient.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Pattern.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Image.js","../../../node_modules/@svgdotjs/svg.js/src/types/PointArray.js","../../../node_modules/@svgdotjs/svg.js/src/modules/core/pointed.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Line.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Marker.js","../../../node_modules/@svgdotjs/svg.js/src/animation/Controller.js","../../../node_modules/@svgdotjs/svg.js/src/utils/pathParser.js","../../../node_modules/@svgdotjs/svg.js/src/types/PathArray.js","../../../node_modules/@svgdotjs/svg.js/src/animation/Morphable.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Path.js","../../../node_modules/@svgdotjs/svg.js/src/modules/core/poly.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Polygon.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Polyline.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Rect.js","../../../node_modules/@svgdotjs/svg.js/src/animation/Queue.js","../../../node_modules/@svgdotjs/svg.js/src/animation/Animator.js","../../../node_modules/@svgdotjs/svg.js/src/animation/Timeline.js","../../../node_modules/@svgdotjs/svg.js/src/animation/Runner.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Svg.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Symbol.js","../../../node_modules/@svgdotjs/svg.js/src/modules/core/textable.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Text.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Tspan.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Circle.js","../../../node_modules/@svgdotjs/svg.js/src/elements/ClipPath.js","../../../node_modules/@svgdotjs/svg.js/src/elements/ForeignObject.js","../../../node_modules/@svgdotjs/svg.js/src/modules/core/containerGeometry.js","../../../node_modules/@svgdotjs/svg.js/src/elements/G.js","../../../node_modules/@svgdotjs/svg.js/src/elements/A.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Mask.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Stop.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Style.js","../../../node_modules/@svgdotjs/svg.js/src/elements/TextPath.js","../../../node_modules/@svgdotjs/svg.js/src/elements/Use.js","../../../node_modules/@svgdotjs/svg.js/src/main.js","../../../node_modules/vexchords/chordbox.js","../../../node_modules/vexchords/index.js","../../../app/frontend/js/chord-forms.js","../../../node_modules/chordsheetjs/lib/module.js","../../../app/frontend/js/song-chords.js"],"sourcesContent":["const methods = {}\nconst names = []\n\nexport function registerMethods(name, m) {\n if (Array.isArray(name)) {\n for (const _name of name) {\n registerMethods(_name, m)\n }\n return\n }\n\n if (typeof name === 'object') {\n for (const _name in name) {\n registerMethods(_name, name[_name])\n }\n return\n }\n\n addMethodNames(Object.getOwnPropertyNames(m))\n methods[name] = Object.assign(methods[name] || {}, m)\n}\n\nexport function getMethodsFor(name) {\n return methods[name] || {}\n}\n\nexport function getMethodNames() {\n return [...new Set(names)]\n}\n\nexport function addMethodNames(_names) {\n names.push(..._names)\n}\n","// Map function\nexport function map(array, block) {\n let i\n const il = array.length\n const result = []\n\n for (i = 0; i < il; i++) {\n result.push(block(array[i]))\n }\n\n return result\n}\n\n// Filter function\nexport function filter(array, block) {\n let i\n const il = array.length\n const result = []\n\n for (i = 0; i < il; i++) {\n if (block(array[i])) {\n result.push(array[i])\n }\n }\n\n return result\n}\n\n// Degrees to radians\nexport function radians(d) {\n return ((d % 360) * Math.PI) / 180\n}\n\n// Radians to degrees\nexport function degrees(r) {\n return ((r * 180) / Math.PI) % 360\n}\n\n// Convert camel cased string to dash separated\nexport function unCamelCase(s) {\n return s.replace(/([A-Z])/g, function (m, g) {\n return '-' + g.toLowerCase()\n })\n}\n\n// Capitalize first letter of a string\nexport function capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1)\n}\n\n// Calculate proportional width and height values when necessary\nexport function proportionalSize(element, width, height, box) {\n if (width == null || height == null) {\n box = box || element.bbox()\n\n if (width == null) {\n width = (box.width / box.height) * height\n } else if (height == null) {\n height = (box.height / box.width) * width\n }\n }\n\n return {\n width: width,\n height: height\n }\n}\n\n/**\n * This function adds support for string origins.\n * It searches for an origin in o.origin o.ox and o.originX.\n * This way, origin: {x: 'center', y: 50} can be passed as well as ox: 'center', oy: 50\n **/\nexport function getOrigin(o, element) {\n const origin = o.origin\n // First check if origin is in ox or originX\n let ox = o.ox != null ? o.ox : o.originX != null ? o.originX : 'center'\n let oy = o.oy != null ? o.oy : o.originY != null ? o.originY : 'center'\n\n // Then check if origin was used and overwrite in that case\n if (origin != null) {\n ;[ox, oy] = Array.isArray(origin)\n ? origin\n : typeof origin === 'object'\n ? [origin.x, origin.y]\n : [origin, origin]\n }\n\n // Make sure to only call bbox when actually needed\n const condX = typeof ox === 'string'\n const condY = typeof oy === 'string'\n if (condX || condY) {\n const { height, width, x, y } = element.bbox()\n\n // And only overwrite if string was passed for this specific axis\n if (condX) {\n ox = ox.includes('left')\n ? x\n : ox.includes('right')\n ? x + width\n : x + width / 2\n }\n\n if (condY) {\n oy = oy.includes('top')\n ? y\n : oy.includes('bottom')\n ? y + height\n : y + height / 2\n }\n }\n\n // Return the origin as it is if it wasn't a string\n return [ox, oy]\n}\n\nconst descriptiveElements = new Set(['desc', 'metadata', 'title'])\nexport const isDescriptive = (element) =>\n descriptiveElements.has(element.nodeName)\n\nexport const writeDataToDom = (element, data, defaults = {}) => {\n const cloned = { ...data }\n\n for (const key in cloned) {\n if (cloned[key].valueOf() === defaults[key]) {\n delete cloned[key]\n }\n }\n\n if (Object.keys(cloned).length) {\n element.node.setAttribute('data-svgjs', JSON.stringify(cloned)) // see #428\n } else {\n element.node.removeAttribute('data-svgjs')\n element.node.removeAttribute('svgjs:data')\n }\n}\n","// Default namespaces\nexport const svg = 'http://www.w3.org/2000/svg'\nexport const html = 'http://www.w3.org/1999/xhtml'\nexport const xmlns = 'http://www.w3.org/2000/xmlns/'\nexport const xlink = 'http://www.w3.org/1999/xlink'\n","export const globals = {\n window: typeof window === 'undefined' ? null : window,\n document: typeof document === 'undefined' ? null : document\n}\n\nexport function registerWindow(win = null, doc = null) {\n globals.window = win\n globals.document = doc\n}\n\nconst save = {}\n\nexport function saveWindow() {\n save.window = globals.window\n save.document = globals.document\n}\n\nexport function restoreWindow() {\n globals.window = save.window\n globals.document = save.document\n}\n\nexport function withWindow(win, fn) {\n saveWindow()\n registerWindow(win, win.document)\n fn(win, win.document)\n restoreWindow()\n}\n\nexport function getWindow() {\n return globals.window\n}\n","export default class Base {\n // constructor (node/*, {extensions = []} */) {\n // // this.tags = []\n // //\n // // for (let extension of extensions) {\n // // extension.setup.call(this, node)\n // // this.tags.push(extension.name)\n // // }\n // }\n}\n","import { addMethodNames } from './methods.js'\nimport { capitalize } from './utils.js'\nimport { svg } from '../modules/core/namespaces.js'\nimport { globals } from '../utils/window.js'\nimport Base from '../types/Base.js'\n\nconst elements = {}\nexport const root = '___SYMBOL___ROOT___'\n\n// Method for element creation\nexport function create(name, ns = svg) {\n // create element\n return globals.document.createElementNS(ns, name)\n}\n\nexport function makeInstance(element, isHTML = false) {\n if (element instanceof Base) return element\n\n if (typeof element === 'object') {\n return adopter(element)\n }\n\n if (element == null) {\n return new elements[root]()\n }\n\n if (typeof element === 'string' && element.charAt(0) !== '<') {\n return adopter(globals.document.querySelector(element))\n }\n\n // Make sure, that HTML elements are created with the correct namespace\n const wrapper = isHTML ? globals.document.createElement('div') : create('svg')\n wrapper.innerHTML = element\n\n // We can use firstChild here because we know,\n // that the first char is < and thus an element\n element = adopter(wrapper.firstChild)\n\n // make sure, that element doesn't have its wrapper attached\n wrapper.removeChild(wrapper.firstChild)\n return element\n}\n\nexport function nodeOrNew(name, node) {\n return node &&\n (node instanceof globals.window.Node ||\n (node.ownerDocument &&\n node instanceof node.ownerDocument.defaultView.Node))\n ? node\n : create(name)\n}\n\n// Adopt existing svg elements\nexport function adopt(node) {\n // check for presence of node\n if (!node) return null\n\n // make sure a node isn't already adopted\n if (node.instance instanceof Base) return node.instance\n\n if (node.nodeName === '#document-fragment') {\n return new elements.Fragment(node)\n }\n\n // initialize variables\n let className = capitalize(node.nodeName || 'Dom')\n\n // Make sure that gradients are adopted correctly\n if (className === 'LinearGradient' || className === 'RadialGradient') {\n className = 'Gradient'\n\n // Fallback to Dom if element is not known\n } else if (!elements[className]) {\n className = 'Dom'\n }\n\n return new elements[className](node)\n}\n\nlet adopter = adopt\n\nexport function mockAdopt(mock = adopt) {\n adopter = mock\n}\n\nexport function register(element, name = element.name, asRoot = false) {\n elements[name] = element\n if (asRoot) elements[root] = element\n\n addMethodNames(Object.getOwnPropertyNames(element.prototype))\n\n return element\n}\n\nexport function getClass(name) {\n return elements[name]\n}\n\n// Element id sequence\nlet did = 1000\n\n// Get next named element id\nexport function eid(name) {\n return 'Svgjs' + capitalize(name) + did++\n}\n\n// Deep new id assignment\nexport function assignNewId(node) {\n // do the same for SVG child nodes as well\n for (let i = node.children.length - 1; i >= 0; i--) {\n assignNewId(node.children[i])\n }\n\n if (node.id) {\n node.id = eid(node.nodeName)\n return node\n }\n\n return node\n}\n\n// Method for extending objects\nexport function extend(modules, methods) {\n let key, i\n\n modules = Array.isArray(modules) ? modules : [modules]\n\n for (i = modules.length - 1; i >= 0; i--) {\n for (key in methods) {\n modules[i].prototype[key] = methods[key]\n }\n }\n}\n\nexport function wrapWithAttrCheck(fn) {\n return function (...args) {\n const o = args[args.length - 1]\n\n if (o && o.constructor === Object && !(o instanceof Array)) {\n return fn.apply(this, args.slice(0, -1)).attr(o)\n } else {\n return fn.apply(this, args)\n }\n }\n}\n","import { makeInstance } from '../../utils/adopter.js'\nimport { registerMethods } from '../../utils/methods.js'\n\n// Get all siblings, including myself\nexport function siblings() {\n return this.parent().children()\n}\n\n// Get the current position siblings\nexport function position() {\n return this.parent().index(this)\n}\n\n// Get the next element (will return null if there is none)\nexport function next() {\n return this.siblings()[this.position() + 1]\n}\n\n// Get the next element (will return null if there is none)\nexport function prev() {\n return this.siblings()[this.position() - 1]\n}\n\n// Send given element one step forward\nexport function forward() {\n const i = this.position()\n const p = this.parent()\n\n // move node one step forward\n p.add(this.remove(), i + 1)\n\n return this\n}\n\n// Send given element one step backward\nexport function backward() {\n const i = this.position()\n const p = this.parent()\n\n p.add(this.remove(), i ? i - 1 : 0)\n\n return this\n}\n\n// Send given element all the way to the front\nexport function front() {\n const p = this.parent()\n\n // Move node forward\n p.add(this.remove())\n\n return this\n}\n\n// Send given element all the way to the back\nexport function back() {\n const p = this.parent()\n\n // Move node back\n p.add(this.remove(), 0)\n\n return this\n}\n\n// Inserts a given element before the targeted element\nexport function before(element) {\n element = makeInstance(element)\n element.remove()\n\n const i = this.position()\n\n this.parent().add(element, i)\n\n return this\n}\n\n// Inserts a given element after the targeted element\nexport function after(element) {\n element = makeInstance(element)\n element.remove()\n\n const i = this.position()\n\n this.parent().add(element, i + 1)\n\n return this\n}\n\nexport function insertBefore(element) {\n element = makeInstance(element)\n element.before(this)\n return this\n}\n\nexport function insertAfter(element) {\n element = makeInstance(element)\n element.after(this)\n return this\n}\n\nregisterMethods('Dom', {\n siblings,\n position,\n next,\n prev,\n forward,\n backward,\n front,\n back,\n before,\n after,\n insertBefore,\n insertAfter\n})\n","// Parse unit value\nexport const numberAndUnit =\n /^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i\n\n// Parse hex value\nexport const hex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i\n\n// Parse rgb value\nexport const rgb = /rgb\\((\\d+),(\\d+),(\\d+)\\)/\n\n// Parse reference id\nexport const reference = /(#[a-z_][a-z0-9\\-_]*)/i\n\n// splits a transformation chain\nexport const transforms = /\\)\\s*,?\\s*/\n\n// Whitespace\nexport const whitespace = /\\s/g\n\n// Test hex value\nexport const isHex = /^#[a-f0-9]{3}$|^#[a-f0-9]{6}$/i\n\n// Test rgb value\nexport const isRgb = /^rgb\\(/\n\n// Test for blank string\nexport const isBlank = /^(\\s+)?$/\n\n// Test for numeric string\nexport const isNumber = /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i\n\n// Test for image url\nexport const isImage = /\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i\n\n// split at whitespace and comma\nexport const delimiter = /[\\s,]+/\n\n// Test for path letter\nexport const isPathLetter = /[MLHVCSQTAZ]/i\n","import { delimiter } from '../core/regex.js'\nimport { registerMethods } from '../../utils/methods.js'\n\n// Return array of classes on the node\nexport function classes() {\n const attr = this.attr('class')\n return attr == null ? [] : attr.trim().split(delimiter)\n}\n\n// Return true if class exists on the node, false otherwise\nexport function hasClass(name) {\n return this.classes().indexOf(name) !== -1\n}\n\n// Add class to the node\nexport function addClass(name) {\n if (!this.hasClass(name)) {\n const array = this.classes()\n array.push(name)\n this.attr('class', array.join(' '))\n }\n\n return this\n}\n\n// Remove class from the node\nexport function removeClass(name) {\n if (this.hasClass(name)) {\n this.attr(\n 'class',\n this.classes()\n .filter(function (c) {\n return c !== name\n })\n .join(' ')\n )\n }\n\n return this\n}\n\n// Toggle the presence of a class on the node\nexport function toggleClass(name) {\n return this.hasClass(name) ? this.removeClass(name) : this.addClass(name)\n}\n\nregisterMethods('Dom', {\n classes,\n hasClass,\n addClass,\n removeClass,\n toggleClass\n})\n","import { isBlank } from '../core/regex.js'\nimport { registerMethods } from '../../utils/methods.js'\n\n// Dynamic style generator\nexport function css(style, val) {\n const ret = {}\n if (arguments.length === 0) {\n // get full style as object\n this.node.style.cssText\n .split(/\\s*;\\s*/)\n .filter(function (el) {\n return !!el.length\n })\n .forEach(function (el) {\n const t = el.split(/\\s*:\\s*/)\n ret[t[0]] = t[1]\n })\n return ret\n }\n\n if (arguments.length < 2) {\n // get style properties as array\n if (Array.isArray(style)) {\n for (const name of style) {\n const cased = name\n ret[name] = this.node.style.getPropertyValue(cased)\n }\n return ret\n }\n\n // get style for property\n if (typeof style === 'string') {\n return this.node.style.getPropertyValue(style)\n }\n\n // set styles in object\n if (typeof style === 'object') {\n for (const name in style) {\n // set empty string if null/undefined/'' was given\n this.node.style.setProperty(\n name,\n style[name] == null || isBlank.test(style[name]) ? '' : style[name]\n )\n }\n }\n }\n\n // set style for property\n if (arguments.length === 2) {\n this.node.style.setProperty(\n style,\n val == null || isBlank.test(val) ? '' : val\n )\n }\n\n return this\n}\n\n// Show element\nexport function show() {\n return this.css('display', '')\n}\n\n// Hide element\nexport function hide() {\n return this.css('display', 'none')\n}\n\n// Is element visible?\nexport function visible() {\n return this.css('display') !== 'none'\n}\n\nregisterMethods('Dom', {\n css,\n show,\n hide,\n visible\n})\n","import { registerMethods } from '../../utils/methods.js'\nimport { filter, map } from '../../utils/utils.js'\n\n// Store data values on svg nodes\nexport function data(a, v, r) {\n if (a == null) {\n // get an object of attributes\n return this.data(\n map(\n filter(\n this.node.attributes,\n (el) => el.nodeName.indexOf('data-') === 0\n ),\n (el) => el.nodeName.slice(5)\n )\n )\n } else if (a instanceof Array) {\n const data = {}\n for (const key of a) {\n data[key] = this.data(key)\n }\n return data\n } else if (typeof a === 'object') {\n for (v in a) {\n this.data(v, a[v])\n }\n } else if (arguments.length < 2) {\n try {\n return JSON.parse(this.attr('data-' + a))\n } catch (e) {\n return this.attr('data-' + a)\n }\n } else {\n this.attr(\n 'data-' + a,\n v === null\n ? null\n : r === true || typeof v === 'string' || typeof v === 'number'\n ? v\n : JSON.stringify(v)\n )\n }\n\n return this\n}\n\nregisterMethods('Dom', { data })\n","import { registerMethods } from '../../utils/methods.js'\n\n// Remember arbitrary data\nexport function remember(k, v) {\n // remember every item in an object individually\n if (typeof arguments[0] === 'object') {\n for (const key in k) {\n this.remember(key, k[key])\n }\n } else if (arguments.length === 1) {\n // retrieve memory\n return this.memory()[k]\n } else {\n // store memory\n this.memory()[k] = v\n }\n\n return this\n}\n\n// Erase a given memory\nexport function forget() {\n if (arguments.length === 0) {\n this._memory = {}\n } else {\n for (let i = arguments.length - 1; i >= 0; i--) {\n delete this.memory()[arguments[i]]\n }\n }\n return this\n}\n\n// This triggers creation of a new hidden class which is not performant\n// However, this function is not rarely used so it will not happen frequently\n// Return local memory object\nexport function memory() {\n return (this._memory = this._memory || {})\n}\n\nregisterMethods('Dom', { remember, forget, memory })\n","import { hex, isHex, isRgb, rgb, whitespace } from '../modules/core/regex.js'\n\nfunction sixDigitHex(hex) {\n return hex.length === 4\n ? [\n '#',\n hex.substring(1, 2),\n hex.substring(1, 2),\n hex.substring(2, 3),\n hex.substring(2, 3),\n hex.substring(3, 4),\n hex.substring(3, 4)\n ].join('')\n : hex\n}\n\nfunction componentHex(component) {\n const integer = Math.round(component)\n const bounded = Math.max(0, Math.min(255, integer))\n const hex = bounded.toString(16)\n return hex.length === 1 ? '0' + hex : hex\n}\n\nfunction is(object, space) {\n for (let i = space.length; i--; ) {\n if (object[space[i]] == null) {\n return false\n }\n }\n return true\n}\n\nfunction getParameters(a, b) {\n const params = is(a, 'rgb')\n ? { _a: a.r, _b: a.g, _c: a.b, _d: 0, space: 'rgb' }\n : is(a, 'xyz')\n ? { _a: a.x, _b: a.y, _c: a.z, _d: 0, space: 'xyz' }\n : is(a, 'hsl')\n ? { _a: a.h, _b: a.s, _c: a.l, _d: 0, space: 'hsl' }\n : is(a, 'lab')\n ? { _a: a.l, _b: a.a, _c: a.b, _d: 0, space: 'lab' }\n : is(a, 'lch')\n ? { _a: a.l, _b: a.c, _c: a.h, _d: 0, space: 'lch' }\n : is(a, 'cmyk')\n ? { _a: a.c, _b: a.m, _c: a.y, _d: a.k, space: 'cmyk' }\n : { _a: 0, _b: 0, _c: 0, space: 'rgb' }\n\n params.space = b || params.space\n return params\n}\n\nfunction cieSpace(space) {\n if (space === 'lab' || space === 'xyz' || space === 'lch') {\n return true\n } else {\n return false\n }\n}\n\nfunction hueToRgb(p, q, t) {\n if (t < 0) t += 1\n if (t > 1) t -= 1\n if (t < 1 / 6) return p + (q - p) * 6 * t\n if (t < 1 / 2) return q\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6\n return p\n}\n\nexport default class Color {\n constructor(...inputs) {\n this.init(...inputs)\n }\n\n // Test if given value is a color\n static isColor(color) {\n return (\n color && (color instanceof Color || this.isRgb(color) || this.test(color))\n )\n }\n\n // Test if given value is an rgb object\n static isRgb(color) {\n return (\n color &&\n typeof color.r === 'number' &&\n typeof color.g === 'number' &&\n typeof color.b === 'number'\n )\n }\n\n /*\n Generating random colors\n */\n static random(mode = 'vibrant', t) {\n // Get the math modules\n const { random, round, sin, PI: pi } = Math\n\n // Run the correct generator\n if (mode === 'vibrant') {\n const l = (81 - 57) * random() + 57\n const c = (83 - 45) * random() + 45\n const h = 360 * random()\n const color = new Color(l, c, h, 'lch')\n return color\n } else if (mode === 'sine') {\n t = t == null ? random() : t\n const r = round(80 * sin((2 * pi * t) / 0.5 + 0.01) + 150)\n const g = round(50 * sin((2 * pi * t) / 0.5 + 4.6) + 200)\n const b = round(100 * sin((2 * pi * t) / 0.5 + 2.3) + 150)\n const color = new Color(r, g, b)\n return color\n } else if (mode === 'pastel') {\n const l = (94 - 86) * random() + 86\n const c = (26 - 9) * random() + 9\n const h = 360 * random()\n const color = new Color(l, c, h, 'lch')\n return color\n } else if (mode === 'dark') {\n const l = 10 + 10 * random()\n const c = (125 - 75) * random() + 86\n const h = 360 * random()\n const color = new Color(l, c, h, 'lch')\n return color\n } else if (mode === 'rgb') {\n const r = 255 * random()\n const g = 255 * random()\n const b = 255 * random()\n const color = new Color(r, g, b)\n return color\n } else if (mode === 'lab') {\n const l = 100 * random()\n const a = 256 * random() - 128\n const b = 256 * random() - 128\n const color = new Color(l, a, b, 'lab')\n return color\n } else if (mode === 'grey') {\n const grey = 255 * random()\n const color = new Color(grey, grey, grey)\n return color\n } else {\n throw new Error('Unsupported random color mode')\n }\n }\n\n // Test if given value is a color string\n static test(color) {\n return typeof color === 'string' && (isHex.test(color) || isRgb.test(color))\n }\n\n cmyk() {\n // Get the rgb values for the current color\n const { _a, _b, _c } = this.rgb()\n const [r, g, b] = [_a, _b, _c].map((v) => v / 255)\n\n // Get the cmyk values in an unbounded format\n const k = Math.min(1 - r, 1 - g, 1 - b)\n\n if (k === 1) {\n // Catch the black case\n return new Color(0, 0, 0, 1, 'cmyk')\n }\n\n const c = (1 - r - k) / (1 - k)\n const m = (1 - g - k) / (1 - k)\n const y = (1 - b - k) / (1 - k)\n\n // Construct the new color\n const color = new Color(c, m, y, k, 'cmyk')\n return color\n }\n\n hsl() {\n // Get the rgb values\n const { _a, _b, _c } = this.rgb()\n const [r, g, b] = [_a, _b, _c].map((v) => v / 255)\n\n // Find the maximum and minimum values to get the lightness\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n const l = (max + min) / 2\n\n // If the r, g, v values are identical then we are grey\n const isGrey = max === min\n\n // Calculate the hue and saturation\n const delta = max - min\n const s = isGrey\n ? 0\n : l > 0.5\n ? delta / (2 - max - min)\n : delta / (max + min)\n const h = isGrey\n ? 0\n : max === r\n ? ((g - b) / delta + (g < b ? 6 : 0)) / 6\n : max === g\n ? ((b - r) / delta + 2) / 6\n : max === b\n ? ((r - g) / delta + 4) / 6\n : 0\n\n // Construct and return the new color\n const color = new Color(360 * h, 100 * s, 100 * l, 'hsl')\n return color\n }\n\n init(a = 0, b = 0, c = 0, d = 0, space = 'rgb') {\n // This catches the case when a falsy value is passed like ''\n a = !a ? 0 : a\n\n // Reset all values in case the init function is rerun with new color space\n if (this.space) {\n for (const component in this.space) {\n delete this[this.space[component]]\n }\n }\n\n if (typeof a === 'number') {\n // Allow for the case that we don't need d...\n space = typeof d === 'string' ? d : space\n d = typeof d === 'string' ? 0 : d\n\n // Assign the values straight to the color\n Object.assign(this, { _a: a, _b: b, _c: c, _d: d, space })\n // If the user gave us an array, make the color from it\n } else if (a instanceof Array) {\n this.space = b || (typeof a[3] === 'string' ? a[3] : a[4]) || 'rgb'\n Object.assign(this, { _a: a[0], _b: a[1], _c: a[2], _d: a[3] || 0 })\n } else if (a instanceof Object) {\n // Set the object up and assign its values directly\n const values = getParameters(a, b)\n Object.assign(this, values)\n } else if (typeof a === 'string') {\n if (isRgb.test(a)) {\n const noWhitespace = a.replace(whitespace, '')\n const [_a, _b, _c] = rgb\n .exec(noWhitespace)\n .slice(1, 4)\n .map((v) => parseInt(v))\n Object.assign(this, { _a, _b, _c, _d: 0, space: 'rgb' })\n } else if (isHex.test(a)) {\n const hexParse = (v) => parseInt(v, 16)\n const [, _a, _b, _c] = hex.exec(sixDigitHex(a)).map(hexParse)\n Object.assign(this, { _a, _b, _c, _d: 0, space: 'rgb' })\n } else throw Error(\"Unsupported string format, can't construct Color\")\n }\n\n // Now add the components as a convenience\n const { _a, _b, _c, _d } = this\n const components =\n this.space === 'rgb'\n ? { r: _a, g: _b, b: _c }\n : this.space === 'xyz'\n ? { x: _a, y: _b, z: _c }\n : this.space === 'hsl'\n ? { h: _a, s: _b, l: _c }\n : this.space === 'lab'\n ? { l: _a, a: _b, b: _c }\n : this.space === 'lch'\n ? { l: _a, c: _b, h: _c }\n : this.space === 'cmyk'\n ? { c: _a, m: _b, y: _c, k: _d }\n : {}\n Object.assign(this, components)\n }\n\n lab() {\n // Get the xyz color\n const { x, y, z } = this.xyz()\n\n // Get the lab components\n const l = 116 * y - 16\n const a = 500 * (x - y)\n const b = 200 * (y - z)\n\n // Construct and return a new color\n const color = new Color(l, a, b, 'lab')\n return color\n }\n\n lch() {\n // Get the lab color directly\n const { l, a, b } = this.lab()\n\n // Get the chromaticity and the hue using polar coordinates\n const c = Math.sqrt(a ** 2 + b ** 2)\n let h = (180 * Math.atan2(b, a)) / Math.PI\n if (h < 0) {\n h *= -1\n h = 360 - h\n }\n\n // Make a new color and return it\n const color = new Color(l, c, h, 'lch')\n return color\n }\n /*\n Conversion Methods\n */\n\n rgb() {\n if (this.space === 'rgb') {\n return this\n } else if (cieSpace(this.space)) {\n // Convert to the xyz color space\n let { x, y, z } = this\n if (this.space === 'lab' || this.space === 'lch') {\n // Get the values in the lab space\n let { l, a, b } = this\n if (this.space === 'lch') {\n const { c, h } = this\n const dToR = Math.PI / 180\n a = c * Math.cos(dToR * h)\n b = c * Math.sin(dToR * h)\n }\n\n // Undo the nonlinear function\n const yL = (l + 16) / 116\n const xL = a / 500 + yL\n const zL = yL - b / 200\n\n // Get the xyz values\n const ct = 16 / 116\n const mx = 0.008856\n const nm = 7.787\n x = 0.95047 * (xL ** 3 > mx ? xL ** 3 : (xL - ct) / nm)\n y = 1.0 * (yL ** 3 > mx ? yL ** 3 : (yL - ct) / nm)\n z = 1.08883 * (zL ** 3 > mx ? zL ** 3 : (zL - ct) / nm)\n }\n\n // Convert xyz to unbounded rgb values\n const rU = x * 3.2406 + y * -1.5372 + z * -0.4986\n const gU = x * -0.9689 + y * 1.8758 + z * 0.0415\n const bU = x * 0.0557 + y * -0.204 + z * 1.057\n\n // Convert the values to true rgb values\n const pow = Math.pow\n const bd = 0.0031308\n const r = rU > bd ? 1.055 * pow(rU, 1 / 2.4) - 0.055 : 12.92 * rU\n const g = gU > bd ? 1.055 * pow(gU, 1 / 2.4) - 0.055 : 12.92 * gU\n const b = bU > bd ? 1.055 * pow(bU, 1 / 2.4) - 0.055 : 12.92 * bU\n\n // Make and return the color\n const color = new Color(255 * r, 255 * g, 255 * b)\n return color\n } else if (this.space === 'hsl') {\n // https://bgrins.github.io/TinyColor/docs/tinycolor.html\n // Get the current hsl values\n let { h, s, l } = this\n h /= 360\n s /= 100\n l /= 100\n\n // If we are grey, then just make the color directly\n if (s === 0) {\n l *= 255\n const color = new Color(l, l, l)\n return color\n }\n\n // TODO I have no idea what this does :D If you figure it out, tell me!\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\n const p = 2 * l - q\n\n // Get the rgb values\n const r = 255 * hueToRgb(p, q, h + 1 / 3)\n const g = 255 * hueToRgb(p, q, h)\n const b = 255 * hueToRgb(p, q, h - 1 / 3)\n\n // Make a new color\n const color = new Color(r, g, b)\n return color\n } else if (this.space === 'cmyk') {\n // https://gist.github.com/felipesabino/5066336\n // Get the normalised cmyk values\n const { c, m, y, k } = this\n\n // Get the rgb values\n const r = 255 * (1 - Math.min(1, c * (1 - k) + k))\n const g = 255 * (1 - Math.min(1, m * (1 - k) + k))\n const b = 255 * (1 - Math.min(1, y * (1 - k) + k))\n\n // Form the color and return it\n const color = new Color(r, g, b)\n return color\n } else {\n return this\n }\n }\n\n toArray() {\n const { _a, _b, _c, _d, space } = this\n return [_a, _b, _c, _d, space]\n }\n\n toHex() {\n const [r, g, b] = this._clamped().map(componentHex)\n return `#${r}${g}${b}`\n }\n\n toRgb() {\n const [rV, gV, bV] = this._clamped()\n const string = `rgb(${rV},${gV},${bV})`\n return string\n }\n\n toString() {\n return this.toHex()\n }\n\n xyz() {\n // Normalise the red, green and blue values\n const { _a: r255, _b: g255, _c: b255 } = this.rgb()\n const [r, g, b] = [r255, g255, b255].map((v) => v / 255)\n\n // Convert to the lab rgb space\n const rL = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92\n const gL = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92\n const bL = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92\n\n // Convert to the xyz color space without bounding the values\n const xU = (rL * 0.4124 + gL * 0.3576 + bL * 0.1805) / 0.95047\n const yU = (rL * 0.2126 + gL * 0.7152 + bL * 0.0722) / 1.0\n const zU = (rL * 0.0193 + gL * 0.1192 + bL * 0.9505) / 1.08883\n\n // Get the proper xyz values by applying the bounding\n const x = xU > 0.008856 ? Math.pow(xU, 1 / 3) : 7.787 * xU + 16 / 116\n const y = yU > 0.008856 ? Math.pow(yU, 1 / 3) : 7.787 * yU + 16 / 116\n const z = zU > 0.008856 ? Math.pow(zU, 1 / 3) : 7.787 * zU + 16 / 116\n\n // Make and return the color\n const color = new Color(x, y, z, 'xyz')\n return color\n }\n\n /*\n Input and Output methods\n */\n\n _clamped() {\n const { _a, _b, _c } = this.rgb()\n const { max, min, round } = Math\n const format = (v) => max(0, min(round(v), 255))\n return [_a, _b, _c].map(format)\n }\n\n /*\n Constructing colors\n */\n}\n","import Matrix from './Matrix.js'\n\nexport default class Point {\n // Initialize\n constructor(...args) {\n this.init(...args)\n }\n\n // Clone point\n clone() {\n return new Point(this)\n }\n\n init(x, y) {\n const base = { x: 0, y: 0 }\n\n // ensure source as object\n const source = Array.isArray(x)\n ? { x: x[0], y: x[1] }\n : typeof x === 'object'\n ? { x: x.x, y: x.y }\n : { x: x, y: y }\n\n // merge source\n this.x = source.x == null ? base.x : source.x\n this.y = source.y == null ? base.y : source.y\n\n return this\n }\n\n toArray() {\n return [this.x, this.y]\n }\n\n transform(m) {\n return this.clone().transformO(m)\n }\n\n // Transform point with matrix\n transformO(m) {\n if (!Matrix.isMatrixLike(m)) {\n m = new Matrix(m)\n }\n\n const { x, y } = this\n\n // Perform the matrix multiplication\n this.x = m.a * x + m.c * y + m.e\n this.y = m.b * x + m.d * y + m.f\n\n return this\n }\n}\n\nexport function point(x, y) {\n return new Point(x, y).transformO(this.screenCTM().inverseO())\n}\n","import { delimiter } from '../modules/core/regex.js'\nimport { radians } from '../utils/utils.js'\nimport { register } from '../utils/adopter.js'\nimport Element from '../elements/Element.js'\nimport Point from './Point.js'\n\nfunction closeEnough(a, b, threshold) {\n return Math.abs(b - a) < (threshold || 1e-6)\n}\n\nexport default class Matrix {\n constructor(...args) {\n this.init(...args)\n }\n\n static formatTransforms(o) {\n // Get all of the parameters required to form the matrix\n const flipBoth = o.flip === 'both' || o.flip === true\n const flipX = o.flip && (flipBoth || o.flip === 'x') ? -1 : 1\n const flipY = o.flip && (flipBoth || o.flip === 'y') ? -1 : 1\n const skewX =\n o.skew && o.skew.length\n ? o.skew[0]\n : isFinite(o.skew)\n ? o.skew\n : isFinite(o.skewX)\n ? o.skewX\n : 0\n const skewY =\n o.skew && o.skew.length\n ? o.skew[1]\n : isFinite(o.skew)\n ? o.skew\n : isFinite(o.skewY)\n ? o.skewY\n : 0\n const scaleX =\n o.scale && o.scale.length\n ? o.scale[0] * flipX\n : isFinite(o.scale)\n ? o.scale * flipX\n : isFinite(o.scaleX)\n ? o.scaleX * flipX\n : flipX\n const scaleY =\n o.scale && o.scale.length\n ? o.scale[1] * flipY\n : isFinite(o.scale)\n ? o.scale * flipY\n : isFinite(o.scaleY)\n ? o.scaleY * flipY\n : flipY\n const shear = o.shear || 0\n const theta = o.rotate || o.theta || 0\n const origin = new Point(\n o.origin || o.around || o.ox || o.originX,\n o.oy || o.originY\n )\n const ox = origin.x\n const oy = origin.y\n // We need Point to be invalid if nothing was passed because we cannot default to 0 here. That is why NaN\n const position = new Point(\n o.position || o.px || o.positionX || NaN,\n o.py || o.positionY || NaN\n )\n const px = position.x\n const py = position.y\n const translate = new Point(\n o.translate || o.tx || o.translateX,\n o.ty || o.translateY\n )\n const tx = translate.x\n const ty = translate.y\n const relative = new Point(\n o.relative || o.rx || o.relativeX,\n o.ry || o.relativeY\n )\n const rx = relative.x\n const ry = relative.y\n\n // Populate all of the values\n return {\n scaleX,\n scaleY,\n skewX,\n skewY,\n shear,\n theta,\n rx,\n ry,\n tx,\n ty,\n ox,\n oy,\n px,\n py\n }\n }\n\n static fromArray(a) {\n return { a: a[0], b: a[1], c: a[2], d: a[3], e: a[4], f: a[5] }\n }\n\n static isMatrixLike(o) {\n return (\n o.a != null ||\n o.b != null ||\n o.c != null ||\n o.d != null ||\n o.e != null ||\n o.f != null\n )\n }\n\n // left matrix, right matrix, target matrix which is overwritten\n static matrixMultiply(l, r, o) {\n // Work out the product directly\n const a = l.a * r.a + l.c * r.b\n const b = l.b * r.a + l.d * r.b\n const c = l.a * r.c + l.c * r.d\n const d = l.b * r.c + l.d * r.d\n const e = l.e + l.a * r.e + l.c * r.f\n const f = l.f + l.b * r.e + l.d * r.f\n\n // make sure to use local variables because l/r and o could be the same\n o.a = a\n o.b = b\n o.c = c\n o.d = d\n o.e = e\n o.f = f\n\n return o\n }\n\n around(cx, cy, matrix) {\n return this.clone().aroundO(cx, cy, matrix)\n }\n\n // Transform around a center point\n aroundO(cx, cy, matrix) {\n const dx = cx || 0\n const dy = cy || 0\n return this.translateO(-dx, -dy).lmultiplyO(matrix).translateO(dx, dy)\n }\n\n // Clones this matrix\n clone() {\n return new Matrix(this)\n }\n\n // Decomposes this matrix into its affine parameters\n decompose(cx = 0, cy = 0) {\n // Get the parameters from the matrix\n const a = this.a\n const b = this.b\n const c = this.c\n const d = this.d\n const e = this.e\n const f = this.f\n\n // Figure out if the winding direction is clockwise or counterclockwise\n const determinant = a * d - b * c\n const ccw = determinant > 0 ? 1 : -1\n\n // Since we only shear in x, we can use the x basis to get the x scale\n // and the rotation of the resulting matrix\n const sx = ccw * Math.sqrt(a * a + b * b)\n const thetaRad = Math.atan2(ccw * b, ccw * a)\n const theta = (180 / Math.PI) * thetaRad\n const ct = Math.cos(thetaRad)\n const st = Math.sin(thetaRad)\n\n // We can then solve the y basis vector simultaneously to get the other\n // two affine parameters directly from these parameters\n const lam = (a * c + b * d) / determinant\n const sy = (c * sx) / (lam * a - b) || (d * sx) / (lam * b + a)\n\n // Use the translations\n const tx = e - cx + cx * ct * sx + cy * (lam * ct * sx - st * sy)\n const ty = f - cy + cx * st * sx + cy * (lam * st * sx + ct * sy)\n\n // Construct the decomposition and return it\n return {\n // Return the affine parameters\n scaleX: sx,\n scaleY: sy,\n shear: lam,\n rotate: theta,\n translateX: tx,\n translateY: ty,\n originX: cx,\n originY: cy,\n\n // Return the matrix parameters\n a: this.a,\n b: this.b,\n c: this.c,\n d: this.d,\n e: this.e,\n f: this.f\n }\n }\n\n // Check if two matrices are equal\n equals(other) {\n if (other === this) return true\n const comp = new Matrix(other)\n return (\n closeEnough(this.a, comp.a) &&\n closeEnough(this.b, comp.b) &&\n closeEnough(this.c, comp.c) &&\n closeEnough(this.d, comp.d) &&\n closeEnough(this.e, comp.e) &&\n closeEnough(this.f, comp.f)\n )\n }\n\n // Flip matrix on x or y, at a given offset\n flip(axis, around) {\n return this.clone().flipO(axis, around)\n }\n\n flipO(axis, around) {\n return axis === 'x'\n ? this.scaleO(-1, 1, around, 0)\n : axis === 'y'\n ? this.scaleO(1, -1, 0, around)\n : this.scaleO(-1, -1, axis, around || axis) // Define an x, y flip point\n }\n\n // Initialize\n init(source) {\n const base = Matrix.fromArray([1, 0, 0, 1, 0, 0])\n\n // ensure source as object\n source =\n source instanceof Element\n ? source.matrixify()\n : typeof source === 'string'\n ? Matrix.fromArray(source.split(delimiter).map(parseFloat))\n : Array.isArray(source)\n ? Matrix.fromArray(source)\n : typeof source === 'object' && Matrix.isMatrixLike(source)\n ? source\n : typeof source === 'object'\n ? new Matrix().transform(source)\n : arguments.length === 6\n ? Matrix.fromArray([].slice.call(arguments))\n : base\n\n // Merge the source matrix with the base matrix\n this.a = source.a != null ? source.a : base.a\n this.b = source.b != null ? source.b : base.b\n this.c = source.c != null ? source.c : base.c\n this.d = source.d != null ? source.d : base.d\n this.e = source.e != null ? source.e : base.e\n this.f = source.f != null ? source.f : base.f\n\n return this\n }\n\n inverse() {\n return this.clone().inverseO()\n }\n\n // Inverses matrix\n inverseO() {\n // Get the current parameters out of the matrix\n const a = this.a\n const b = this.b\n const c = this.c\n const d = this.d\n const e = this.e\n const f = this.f\n\n // Invert the 2x2 matrix in the top left\n const det = a * d - b * c\n if (!det) throw new Error('Cannot invert ' + this)\n\n // Calculate the top 2x2 matrix\n const na = d / det\n const nb = -b / det\n const nc = -c / det\n const nd = a / det\n\n // Apply the inverted matrix to the top right\n const ne = -(na * e + nc * f)\n const nf = -(nb * e + nd * f)\n\n // Construct the inverted matrix\n this.a = na\n this.b = nb\n this.c = nc\n this.d = nd\n this.e = ne\n this.f = nf\n\n return this\n }\n\n lmultiply(matrix) {\n return this.clone().lmultiplyO(matrix)\n }\n\n lmultiplyO(matrix) {\n const r = this\n const l = matrix instanceof Matrix ? matrix : new Matrix(matrix)\n\n return Matrix.matrixMultiply(l, r, this)\n }\n\n // Left multiplies by the given matrix\n multiply(matrix) {\n return this.clone().multiplyO(matrix)\n }\n\n multiplyO(matrix) {\n // Get the matrices\n const l = this\n const r = matrix instanceof Matrix ? matrix : new Matrix(matrix)\n\n return Matrix.matrixMultiply(l, r, this)\n }\n\n // Rotate matrix\n rotate(r, cx, cy) {\n return this.clone().rotateO(r, cx, cy)\n }\n\n rotateO(r, cx = 0, cy = 0) {\n // Convert degrees to radians\n r = radians(r)\n\n const cos = Math.cos(r)\n const sin = Math.sin(r)\n\n const { a, b, c, d, e, f } = this\n\n this.a = a * cos - b * sin\n this.b = b * cos + a * sin\n this.c = c * cos - d * sin\n this.d = d * cos + c * sin\n this.e = e * cos - f * sin + cy * sin - cx * cos + cx\n this.f = f * cos + e * sin - cx * sin - cy * cos + cy\n\n return this\n }\n\n // Scale matrix\n scale() {\n return this.clone().scaleO(...arguments)\n }\n\n scaleO(x, y = x, cx = 0, cy = 0) {\n // Support uniform scaling\n if (arguments.length === 3) {\n cy = cx\n cx = y\n y = x\n }\n\n const { a, b, c, d, e, f } = this\n\n this.a = a * x\n this.b = b * y\n this.c = c * x\n this.d = d * y\n this.e = e * x - cx * x + cx\n this.f = f * y - cy * y + cy\n\n return this\n }\n\n // Shear matrix\n shear(a, cx, cy) {\n return this.clone().shearO(a, cx, cy)\n }\n\n // eslint-disable-next-line no-unused-vars\n shearO(lx, cx = 0, cy = 0) {\n const { a, b, c, d, e, f } = this\n\n this.a = a + b * lx\n this.c = c + d * lx\n this.e = e + f * lx - cy * lx\n\n return this\n }\n\n // Skew Matrix\n skew() {\n return this.clone().skewO(...arguments)\n }\n\n skewO(x, y = x, cx = 0, cy = 0) {\n // support uniformal skew\n if (arguments.length === 3) {\n cy = cx\n cx = y\n y = x\n }\n\n // Convert degrees to radians\n x = radians(x)\n y = radians(y)\n\n const lx = Math.tan(x)\n const ly = Math.tan(y)\n\n const { a, b, c, d, e, f } = this\n\n this.a = a + b * lx\n this.b = b + a * ly\n this.c = c + d * lx\n this.d = d + c * ly\n this.e = e + f * lx - cy * lx\n this.f = f + e * ly - cx * ly\n\n return this\n }\n\n // SkewX\n skewX(x, cx, cy) {\n return this.skew(x, 0, cx, cy)\n }\n\n // SkewY\n skewY(y, cx, cy) {\n return this.skew(0, y, cx, cy)\n }\n\n toArray() {\n return [this.a, this.b, this.c, this.d, this.e, this.f]\n }\n\n // Convert matrix to string\n toString() {\n return (\n 'matrix(' +\n this.a +\n ',' +\n this.b +\n ',' +\n this.c +\n ',' +\n this.d +\n ',' +\n this.e +\n ',' +\n this.f +\n ')'\n )\n }\n\n // Transform a matrix into another matrix by manipulating the space\n transform(o) {\n // Check if o is a matrix and then left multiply it directly\n if (Matrix.isMatrixLike(o)) {\n const matrix = new Matrix(o)\n return matrix.multiplyO(this)\n }\n\n // Get the proposed transformations and the current transformations\n const t = Matrix.formatTransforms(o)\n const current = this\n const { x: ox, y: oy } = new Point(t.ox, t.oy).transform(current)\n\n // Construct the resulting matrix\n const transformer = new Matrix()\n .translateO(t.rx, t.ry)\n .lmultiplyO(current)\n .translateO(-ox, -oy)\n .scaleO(t.scaleX, t.scaleY)\n .skewO(t.skewX, t.skewY)\n .shearO(t.shear)\n .rotateO(t.theta)\n .translateO(ox, oy)\n\n // If we want the origin at a particular place, we force it there\n if (isFinite(t.px) || isFinite(t.py)) {\n const origin = new Point(ox, oy).transform(transformer)\n // TODO: Replace t.px with isFinite(t.px)\n // Doesn't work because t.px is also 0 if it wasn't passed\n const dx = isFinite(t.px) ? t.px - origin.x : 0\n const dy = isFinite(t.py) ? t.py - origin.y : 0\n transformer.translateO(dx, dy)\n }\n\n // Translate now after positioning\n transformer.translateO(t.tx, t.ty)\n return transformer\n }\n\n // Translate matrix\n translate(x, y) {\n return this.clone().translateO(x, y)\n }\n\n translateO(x, y) {\n this.e += x || 0\n this.f += y || 0\n return this\n }\n\n valueOf() {\n return {\n a: this.a,\n b: this.b,\n c: this.c,\n d: this.d,\n e: this.e,\n f: this.f\n }\n }\n}\n\nexport function ctm() {\n return new Matrix(this.node.getCTM())\n}\n\nexport function screenCTM() {\n try {\n /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537\n This is needed because FF does not return the transformation matrix\n for the inner coordinate system when getScreenCTM() is called on nested svgs.\n However all other Browsers do that */\n if (typeof this.isRoot === 'function' && !this.isRoot()) {\n const rect = this.rect(1, 1)\n const m = rect.node.getScreenCTM()\n rect.remove()\n return new Matrix(m)\n }\n return new Matrix(this.node.getScreenCTM())\n } catch (e) {\n console.warn(\n `Cannot get CTM from SVG node ${this.node.nodeName}. Is the element rendered?`\n )\n return new Matrix()\n }\n}\n\nregister(Matrix, 'Matrix')\n","import { globals } from '../../utils/window.js'\nimport { makeInstance } from '../../utils/adopter.js'\n\nexport default function parser() {\n // Reuse cached element if possible\n if (!parser.nodes) {\n const svg = makeInstance().size(2, 0)\n svg.node.style.cssText = [\n 'opacity: 0',\n 'position: absolute',\n 'left: -100%',\n 'top: -100%',\n 'overflow: hidden'\n ].join(';')\n\n svg.attr('focusable', 'false')\n svg.attr('aria-hidden', 'true')\n\n const path = svg.path().node\n\n parser.nodes = { svg, path }\n }\n\n if (!parser.nodes.svg.node.parentNode) {\n const b = globals.document.body || globals.document.documentElement\n parser.nodes.svg.addTo(b)\n }\n\n return parser.nodes\n}\n","import { delimiter } from '../modules/core/regex.js'\nimport { globals } from '../utils/window.js'\nimport { register } from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport Matrix from './Matrix.js'\nimport Point from './Point.js'\nimport parser from '../modules/core/parser.js'\n\nexport function isNulledBox(box) {\n return !box.width && !box.height && !box.x && !box.y\n}\n\nexport function domContains(node) {\n return (\n node === globals.document ||\n (\n globals.document.documentElement.contains ||\n function (node) {\n // This is IE - it does not support contains() for top-level SVGs\n while (node.parentNode) {\n node = node.parentNode\n }\n return node === globals.document\n }\n ).call(globals.document.documentElement, node)\n )\n}\n\nexport default class Box {\n constructor(...args) {\n this.init(...args)\n }\n\n addOffset() {\n // offset by window scroll position, because getBoundingClientRect changes when window is scrolled\n this.x += globals.window.pageXOffset\n this.y += globals.window.pageYOffset\n return new Box(this)\n }\n\n init(source) {\n const base = [0, 0, 0, 0]\n source =\n typeof source === 'string'\n ? source.split(delimiter).map(parseFloat)\n : Array.isArray(source)\n ? source\n : typeof source === 'object'\n ? [\n source.left != null ? source.left : source.x,\n source.top != null ? source.top : source.y,\n source.width,\n source.height\n ]\n : arguments.length === 4\n ? [].slice.call(arguments)\n : base\n\n this.x = source[0] || 0\n this.y = source[1] || 0\n this.width = this.w = source[2] || 0\n this.height = this.h = source[3] || 0\n\n // Add more bounding box properties\n this.x2 = this.x + this.w\n this.y2 = this.y + this.h\n this.cx = this.x + this.w / 2\n this.cy = this.y + this.h / 2\n\n return this\n }\n\n isNulled() {\n return isNulledBox(this)\n }\n\n // Merge rect box with another, return a new instance\n merge(box) {\n const x = Math.min(this.x, box.x)\n const y = Math.min(this.y, box.y)\n const width = Math.max(this.x + this.width, box.x + box.width) - x\n const height = Math.max(this.y + this.height, box.y + box.height) - y\n\n return new Box(x, y, width, height)\n }\n\n toArray() {\n return [this.x, this.y, this.width, this.height]\n }\n\n toString() {\n return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height\n }\n\n transform(m) {\n if (!(m instanceof Matrix)) {\n m = new Matrix(m)\n }\n\n let xMin = Infinity\n let xMax = -Infinity\n let yMin = Infinity\n let yMax = -Infinity\n\n const pts = [\n new Point(this.x, this.y),\n new Point(this.x2, this.y),\n new Point(this.x, this.y2),\n new Point(this.x2, this.y2)\n ]\n\n pts.forEach(function (p) {\n p = p.transform(m)\n xMin = Math.min(xMin, p.x)\n xMax = Math.max(xMax, p.x)\n yMin = Math.min(yMin, p.y)\n yMax = Math.max(yMax, p.y)\n })\n\n return new Box(xMin, yMin, xMax - xMin, yMax - yMin)\n }\n}\n\nfunction getBox(el, getBBoxFn, retry) {\n let box\n\n try {\n // Try to get the box with the provided function\n box = getBBoxFn(el.node)\n\n // If the box is worthless and not even in the dom, retry\n // by throwing an error here...\n if (isNulledBox(box) && !domContains(el.node)) {\n throw new Error('Element not in the dom')\n }\n } catch (e) {\n // ... and calling the retry handler here\n box = retry(el)\n }\n\n return box\n}\n\nexport function bbox() {\n // Function to get bbox is getBBox()\n const getBBox = (node) => node.getBBox()\n\n // Take all measures so that a stupid browser renders the element\n // so we can get the bbox from it when we try again\n const retry = (el) => {\n try {\n const clone = el.clone().addTo(parser().svg).show()\n const box = clone.node.getBBox()\n clone.remove()\n return box\n } catch (e) {\n // We give up...\n throw new Error(\n `Getting bbox of element \"${\n el.node.nodeName\n }\" is not possible: ${e.toString()}`\n )\n }\n }\n\n const box = getBox(this, getBBox, retry)\n const bbox = new Box(box)\n\n return bbox\n}\n\nexport function rbox(el) {\n const getRBox = (node) => node.getBoundingClientRect()\n const retry = (el) => {\n // There is no point in trying tricks here because if we insert the element into the dom ourselves\n // it obviously will be at the wrong position\n throw new Error(\n `Getting rbox of element \"${el.node.nodeName}\" is not possible`\n )\n }\n\n const box = getBox(this, getRBox, retry)\n const rbox = new Box(box)\n\n // If an element was passed, we want the bbox in the coordinate system of that element\n if (el) {\n return rbox.transform(el.screenCTM().inverseO())\n }\n\n // Else we want it in absolute screen coordinates\n // Therefore we need to add the scrollOffset\n return rbox.addOffset()\n}\n\n// Checks whether the given point is inside the bounding box\nexport function inside(x, y) {\n const box = this.bbox()\n\n return (\n x > box.x && y > box.y && x < box.x + box.width && y < box.y + box.height\n )\n}\n\nregisterMethods({\n viewbox: {\n viewbox(x, y, width, height) {\n // act as getter\n if (x == null) return new Box(this.attr('viewBox'))\n\n // act as setter\n return this.attr('viewBox', new Box(x, y, width, height))\n },\n\n zoom(level, point) {\n // Its best to rely on the attributes here and here is why:\n // clientXYZ: Doesn't work on non-root svgs because they dont have a CSSBox (silly!)\n // getBoundingClientRect: Doesn't work because Chrome just ignores width and height of nested svgs completely\n // that means, their clientRect is always as big as the content.\n // Furthermore this size is incorrect if the element is further transformed by its parents\n // computedStyle: Only returns meaningful values if css was used with px. We dont go this route here!\n // getBBox: returns the bounding box of its content - that doesn't help!\n let { width, height } = this.attr(['width', 'height'])\n\n // Width and height is a string when a number with a unit is present which we can't use\n // So we try clientXYZ\n if (\n (!width && !height) ||\n typeof width === 'string' ||\n typeof height === 'string'\n ) {\n width = this.node.clientWidth\n height = this.node.clientHeight\n }\n\n // Giving up...\n if (!width || !height) {\n throw new Error(\n 'Impossible to get absolute width and height. Please provide an absolute width and height attribute on the zooming element'\n )\n }\n\n const v = this.viewbox()\n\n const zoomX = width / v.width\n const zoomY = height / v.height\n const zoom = Math.min(zoomX, zoomY)\n\n if (level == null) {\n return zoom\n }\n\n let zoomAmount = zoom / level\n\n // Set the zoomAmount to the highest value which is safe to process and recover from\n // The * 100 is a bit of wiggle room for the matrix transformation\n if (zoomAmount === Infinity) zoomAmount = Number.MAX_SAFE_INTEGER / 100\n\n point =\n point || new Point(width / 2 / zoomX + v.x, height / 2 / zoomY + v.y)\n\n const box = new Box(v).transform(\n new Matrix({ scale: zoomAmount, origin: point })\n )\n\n return this.viewbox(box)\n }\n }\n})\n\nregister(Box, 'Box')\n","import { extend } from '../utils/adopter.js'\n// import { subClassArray } from './ArrayPolyfill.js'\n\nclass List extends Array {\n constructor(arr = [], ...args) {\n super(arr, ...args)\n if (typeof arr === 'number') return this\n this.length = 0\n this.push(...arr)\n }\n}\n\n/* = subClassArray('List', Array, function (arr = []) {\n // This catches the case, that native map tries to create an array with new Array(1)\n if (typeof arr === 'number') return this\n this.length = 0\n this.push(...arr)\n}) */\n\nexport default List\n\nextend([List], {\n each(fnOrMethodName, ...args) {\n if (typeof fnOrMethodName === 'function') {\n return this.map((el, i, arr) => {\n return fnOrMethodName.call(el, el, i, arr)\n })\n } else {\n return this.map((el) => {\n return el[fnOrMethodName](...args)\n })\n }\n },\n\n toArray() {\n return Array.prototype.concat.apply([], this)\n }\n})\n\nconst reserved = ['toArray', 'constructor', 'each']\n\nList.extend = function (methods) {\n methods = methods.reduce((obj, name) => {\n // Don't overwrite own methods\n if (reserved.includes(name)) return obj\n\n // Don't add private methods\n if (name[0] === '_') return obj\n\n // Allow access to original Array methods through a prefix\n if (name in Array.prototype) {\n obj['$' + name] = Array.prototype[name]\n }\n\n // Relay every call to each()\n obj[name] = function (...attrs) {\n return this.each(name, ...attrs)\n }\n return obj\n }, {})\n\n extend([List], methods)\n}\n","import { adopt } from '../../utils/adopter.js'\nimport { globals } from '../../utils/window.js'\nimport { map } from '../../utils/utils.js'\nimport List from '../../types/List.js'\n\nexport default function baseFind(query, parent) {\n return new List(\n map((parent || globals.document).querySelectorAll(query), function (node) {\n return adopt(node)\n })\n )\n}\n\n// Scoped find method\nexport function find(query) {\n return baseFind(query, this.node)\n}\n\nexport function findOne(query) {\n return adopt(this.node.querySelector(query))\n}\n","import { delimiter } from './regex.js'\nimport { makeInstance } from '../../utils/adopter.js'\nimport { globals } from '../../utils/window.js'\n\nlet listenerId = 0\nexport const windowEvents = {}\n\nexport function getEvents(instance) {\n let n = instance.getEventHolder()\n\n // We dont want to save events in global space\n if (n === globals.window) n = windowEvents\n if (!n.events) n.events = {}\n return n.events\n}\n\nexport function getEventTarget(instance) {\n return instance.getEventTarget()\n}\n\nexport function clearEvents(instance) {\n let n = instance.getEventHolder()\n if (n === globals.window) n = windowEvents\n if (n.events) n.events = {}\n}\n\n// Add event binder in the SVG namespace\nexport function on(node, events, listener, binding, options) {\n const l = listener.bind(binding || node)\n const instance = makeInstance(node)\n const bag = getEvents(instance)\n const n = getEventTarget(instance)\n\n // events can be an array of events or a string of events\n events = Array.isArray(events) ? events : events.split(delimiter)\n\n // add id to listener\n if (!listener._svgjsListenerId) {\n listener._svgjsListenerId = ++listenerId\n }\n\n events.forEach(function (event) {\n const ev = event.split('.')[0]\n const ns = event.split('.')[1] || '*'\n\n // ensure valid object\n bag[ev] = bag[ev] || {}\n bag[ev][ns] = bag[ev][ns] || {}\n\n // reference listener\n bag[ev][ns][listener._svgjsListenerId] = l\n\n // add listener\n n.addEventListener(ev, l, options || false)\n })\n}\n\n// Add event unbinder in the SVG namespace\nexport function off(node, events, listener, options) {\n const instance = makeInstance(node)\n const bag = getEvents(instance)\n const n = getEventTarget(instance)\n\n // listener can be a function or a number\n if (typeof listener === 'function') {\n listener = listener._svgjsListenerId\n if (!listener) return\n }\n\n // events can be an array of events or a string or undefined\n events = Array.isArray(events) ? events : (events || '').split(delimiter)\n\n events.forEach(function (event) {\n const ev = event && event.split('.')[0]\n const ns = event && event.split('.')[1]\n let namespace, l\n\n if (listener) {\n // remove listener reference\n if (bag[ev] && bag[ev][ns || '*']) {\n // removeListener\n n.removeEventListener(\n ev,\n bag[ev][ns || '*'][listener],\n options || false\n )\n\n delete bag[ev][ns || '*'][listener]\n }\n } else if (ev && ns) {\n // remove all listeners for a namespaced event\n if (bag[ev] && bag[ev][ns]) {\n for (l in bag[ev][ns]) {\n off(n, [ev, ns].join('.'), l)\n }\n\n delete bag[ev][ns]\n }\n } else if (ns) {\n // remove all listeners for a specific namespace\n for (event in bag) {\n for (namespace in bag[event]) {\n if (ns === namespace) {\n off(n, [event, ns].join('.'))\n }\n }\n }\n } else if (ev) {\n // remove all listeners for the event\n if (bag[ev]) {\n for (namespace in bag[ev]) {\n off(n, [ev, namespace].join('.'))\n }\n\n delete bag[ev]\n }\n } else {\n // remove all listeners on a given node\n for (event in bag) {\n off(n, event)\n }\n\n clearEvents(instance)\n }\n })\n}\n\nexport function dispatch(node, event, data, options) {\n const n = getEventTarget(node)\n\n // Dispatch event\n if (event instanceof globals.window.Event) {\n n.dispatchEvent(event)\n } else {\n event = new globals.window.CustomEvent(event, {\n detail: data,\n cancelable: true,\n ...options\n })\n n.dispatchEvent(event)\n }\n return event\n}\n","import { dispatch, off, on } from '../modules/core/event.js'\nimport { register } from '../utils/adopter.js'\nimport Base from './Base.js'\n\nexport default class EventTarget extends Base {\n addEventListener() {}\n\n dispatch(event, data, options) {\n return dispatch(this, event, data, options)\n }\n\n dispatchEvent(event) {\n const bag = this.getEventHolder().events\n if (!bag) return true\n\n const events = bag[event.type]\n\n for (const i in events) {\n for (const j in events[i]) {\n events[i][j](event)\n }\n }\n\n return !event.defaultPrevented\n }\n\n // Fire given event\n fire(event, data, options) {\n this.dispatch(event, data, options)\n return this\n }\n\n getEventHolder() {\n return this\n }\n\n getEventTarget() {\n return this\n }\n\n // Unbind event from listener\n off(event, listener, options) {\n off(this, event, listener, options)\n return this\n }\n\n // Bind given event to listener\n on(event, listener, binding, options) {\n on(this, event, listener, binding, options)\n return this\n }\n\n removeEventListener() {}\n}\n\nregister(EventTarget, 'EventTarget')\n","export function noop() {}\n\n// Default animation values\nexport const timeline = {\n duration: 400,\n ease: '>',\n delay: 0\n}\n\n// Default attribute values\nexport const attrs = {\n // fill and stroke\n 'fill-opacity': 1,\n 'stroke-opacity': 1,\n 'stroke-width': 0,\n 'stroke-linejoin': 'miter',\n 'stroke-linecap': 'butt',\n fill: '#000000',\n stroke: '#000000',\n opacity: 1,\n\n // position\n x: 0,\n y: 0,\n cx: 0,\n cy: 0,\n\n // size\n width: 0,\n height: 0,\n\n // radius\n r: 0,\n rx: 0,\n ry: 0,\n\n // gradient\n offset: 0,\n 'stop-opacity': 1,\n 'stop-color': '#000000',\n\n // text\n 'text-anchor': 'start'\n}\n","import { delimiter } from '../modules/core/regex.js'\n\nexport default class SVGArray extends Array {\n constructor(...args) {\n super(...args)\n this.init(...args)\n }\n\n clone() {\n return new this.constructor(this)\n }\n\n init(arr) {\n // This catches the case, that native map tries to create an array with new Array(1)\n if (typeof arr === 'number') return this\n this.length = 0\n this.push(...this.parse(arr))\n return this\n }\n\n // Parse whitespace separated string\n parse(array = []) {\n // If already is an array, no need to parse it\n if (array instanceof Array) return array\n\n return array.trim().split(delimiter).map(parseFloat)\n }\n\n toArray() {\n return Array.prototype.concat.apply([], this)\n }\n\n toSet() {\n return new Set(this)\n }\n\n toString() {\n return this.join(' ')\n }\n\n // Flattens the array if needed\n valueOf() {\n const ret = []\n ret.push(...this)\n return ret\n }\n}\n","import { numberAndUnit } from '../modules/core/regex.js'\n\n// Module for unit conversions\nexport default class SVGNumber {\n // Initialize\n constructor(...args) {\n this.init(...args)\n }\n\n convert(unit) {\n return new SVGNumber(this.value, unit)\n }\n\n // Divide number\n divide(number) {\n number = new SVGNumber(number)\n return new SVGNumber(this / number, this.unit || number.unit)\n }\n\n init(value, unit) {\n unit = Array.isArray(value) ? value[1] : unit\n value = Array.isArray(value) ? value[0] : value\n\n // initialize defaults\n this.value = 0\n this.unit = unit || ''\n\n // parse value\n if (typeof value === 'number') {\n // ensure a valid numeric value\n this.value = isNaN(value)\n ? 0\n : !isFinite(value)\n ? value < 0\n ? -3.4e38\n : +3.4e38\n : value\n } else if (typeof value === 'string') {\n unit = value.match(numberAndUnit)\n\n if (unit) {\n // make value numeric\n this.value = parseFloat(unit[1])\n\n // normalize\n if (unit[5] === '%') {\n this.value /= 100\n } else if (unit[5] === 's') {\n this.value *= 1000\n }\n\n // store unit\n this.unit = unit[5]\n }\n } else {\n if (value instanceof SVGNumber) {\n this.value = value.valueOf()\n this.unit = value.unit\n }\n }\n\n return this\n }\n\n // Subtract number\n minus(number) {\n number = new SVGNumber(number)\n return new SVGNumber(this - number, this.unit || number.unit)\n }\n\n // Add number\n plus(number) {\n number = new SVGNumber(number)\n return new SVGNumber(this + number, this.unit || number.unit)\n }\n\n // Multiply number\n times(number) {\n number = new SVGNumber(number)\n return new SVGNumber(this * number, this.unit || number.unit)\n }\n\n toArray() {\n return [this.value, this.unit]\n }\n\n toJSON() {\n return this.toString()\n }\n\n toString() {\n return (\n (this.unit === '%'\n ? ~~(this.value * 1e8) / 1e6\n : this.unit === 's'\n ? this.value / 1e3\n : this.value) + this.unit\n )\n }\n\n valueOf() {\n return this.value\n }\n}\n","import { attrs as defaults } from './defaults.js'\nimport { isNumber } from './regex.js'\nimport Color from '../../types/Color.js'\nimport SVGArray from '../../types/SVGArray.js'\nimport SVGNumber from '../../types/SVGNumber.js'\n\nconst colorAttributes = new Set([\n 'fill',\n 'stroke',\n 'color',\n 'bgcolor',\n 'stop-color',\n 'flood-color',\n 'lighting-color'\n])\n\nconst hooks = []\nexport function registerAttrHook(fn) {\n hooks.push(fn)\n}\n\n// Set svg element attribute\nexport default function attr(attr, val, ns) {\n // act as full getter\n if (attr == null) {\n // get an object of attributes\n attr = {}\n val = this.node.attributes\n\n for (const node of val) {\n attr[node.nodeName] = isNumber.test(node.nodeValue)\n ? parseFloat(node.nodeValue)\n : node.nodeValue\n }\n\n return attr\n } else if (attr instanceof Array) {\n // loop through array and get all values\n return attr.reduce((last, curr) => {\n last[curr] = this.attr(curr)\n return last\n }, {})\n } else if (typeof attr === 'object' && attr.constructor === Object) {\n // apply every attribute individually if an object is passed\n for (val in attr) this.attr(val, attr[val])\n } else if (val === null) {\n // remove value\n this.node.removeAttribute(attr)\n } else if (val == null) {\n // act as a getter if the first and only argument is not an object\n val = this.node.getAttribute(attr)\n return val == null\n ? defaults[attr]\n : isNumber.test(val)\n ? parseFloat(val)\n : val\n } else {\n // Loop through hooks and execute them to convert value\n val = hooks.reduce((_val, hook) => {\n return hook(attr, _val, this)\n }, val)\n\n // ensure correct numeric values (also accepts NaN and Infinity)\n if (typeof val === 'number') {\n val = new SVGNumber(val)\n } else if (colorAttributes.has(attr) && Color.isColor(val)) {\n // ensure full hex color\n val = new Color(val)\n } else if (val.constructor === Array) {\n // Check for plain arrays and parse array values\n val = new SVGArray(val)\n }\n\n // if the passed attribute is leading...\n if (attr === 'leading') {\n // ... call the leading method instead\n if (this.leading) {\n this.leading(val)\n }\n } else {\n // set given attribute on node\n typeof ns === 'string'\n ? this.node.setAttributeNS(ns, attr, val.toString())\n : this.node.setAttribute(attr, val.toString())\n }\n\n // rebuild if required\n if (this.rebuild && (attr === 'font-size' || attr === 'x')) {\n this.rebuild()\n }\n }\n\n return this\n}\n","import {\n adopt,\n assignNewId,\n eid,\n extend,\n makeInstance,\n create,\n register\n} from '../utils/adopter.js'\nimport { find, findOne } from '../modules/core/selector.js'\nimport { globals } from '../utils/window.js'\nimport { map } from '../utils/utils.js'\nimport { svg, html } from '../modules/core/namespaces.js'\nimport EventTarget from '../types/EventTarget.js'\nimport List from '../types/List.js'\nimport attr from '../modules/core/attr.js'\n\nexport default class Dom extends EventTarget {\n constructor(node, attrs) {\n super()\n this.node = node\n this.type = node.nodeName\n\n if (attrs && node !== attrs) {\n this.attr(attrs)\n }\n }\n\n // Add given element at a position\n add(element, i) {\n element = makeInstance(element)\n\n // If non-root svg nodes are added we have to remove their namespaces\n if (\n element.removeNamespace &&\n this.node instanceof globals.window.SVGElement\n ) {\n element.removeNamespace()\n }\n\n if (i == null) {\n this.node.appendChild(element.node)\n } else if (element.node !== this.node.childNodes[i]) {\n this.node.insertBefore(element.node, this.node.childNodes[i])\n }\n\n return this\n }\n\n // Add element to given container and return self\n addTo(parent, i) {\n return makeInstance(parent).put(this, i)\n }\n\n // Returns all child elements\n children() {\n return new List(\n map(this.node.children, function (node) {\n return adopt(node)\n })\n )\n }\n\n // Remove all elements in this container\n clear() {\n // remove children\n while (this.node.hasChildNodes()) {\n this.node.removeChild(this.node.lastChild)\n }\n\n return this\n }\n\n // Clone element\n clone(deep = true, assignNewIds = true) {\n // write dom data to the dom so the clone can pickup the data\n this.writeDataToDom()\n\n // clone element\n let nodeClone = this.node.cloneNode(deep)\n if (assignNewIds) {\n // assign new id\n nodeClone = assignNewId(nodeClone)\n }\n return new this.constructor(nodeClone)\n }\n\n // Iterates over all children and invokes a given block\n each(block, deep) {\n const children = this.children()\n let i, il\n\n for (i = 0, il = children.length; i < il; i++) {\n block.apply(children[i], [i, children])\n\n if (deep) {\n children[i].each(block, deep)\n }\n }\n\n return this\n }\n\n element(nodeName, attrs) {\n return this.put(new Dom(create(nodeName), attrs))\n }\n\n // Get first child\n first() {\n return adopt(this.node.firstChild)\n }\n\n // Get a element at the given index\n get(i) {\n return adopt(this.node.childNodes[i])\n }\n\n getEventHolder() {\n return this.node\n }\n\n getEventTarget() {\n return this.node\n }\n\n // Checks if the given element is a child\n has(element) {\n return this.index(element) >= 0\n }\n\n html(htmlOrFn, outerHTML) {\n return this.xml(htmlOrFn, outerHTML, html)\n }\n\n // Get / set id\n id(id) {\n // generate new id if no id set\n if (typeof id === 'undefined' && !this.node.id) {\n this.node.id = eid(this.type)\n }\n\n // don't set directly with this.node.id to make `null` work correctly\n return this.attr('id', id)\n }\n\n // Gets index of given element\n index(element) {\n return [].slice.call(this.node.childNodes).indexOf(element.node)\n }\n\n // Get the last child\n last() {\n return adopt(this.node.lastChild)\n }\n\n // matches the element vs a css selector\n matches(selector) {\n const el = this.node\n const matcher =\n el.matches ||\n el.matchesSelector ||\n el.msMatchesSelector ||\n el.mozMatchesSelector ||\n el.webkitMatchesSelector ||\n el.oMatchesSelector ||\n null\n return matcher && matcher.call(el, selector)\n }\n\n // Returns the parent element instance\n parent(type) {\n let parent = this\n\n // check for parent\n if (!parent.node.parentNode) return null\n\n // get parent element\n parent = adopt(parent.node.parentNode)\n\n if (!type) return parent\n\n // loop through ancestors if type is given\n do {\n if (\n typeof type === 'string' ? parent.matches(type) : parent instanceof type\n )\n return parent\n } while ((parent = adopt(parent.node.parentNode)))\n\n return parent\n }\n\n // Basically does the same as `add()` but returns the added element instead\n put(element, i) {\n element = makeInstance(element)\n this.add(element, i)\n return element\n }\n\n // Add element to given container and return container\n putIn(parent, i) {\n return makeInstance(parent).add(this, i)\n }\n\n // Remove element\n remove() {\n if (this.parent()) {\n this.parent().removeElement(this)\n }\n\n return this\n }\n\n // Remove a given child\n removeElement(element) {\n this.node.removeChild(element.node)\n\n return this\n }\n\n // Replace this with element\n replace(element) {\n element = makeInstance(element)\n\n if (this.node.parentNode) {\n this.node.parentNode.replaceChild(element.node, this.node)\n }\n\n return element\n }\n\n round(precision = 2, map = null) {\n const factor = 10 ** precision\n const attrs = this.attr(map)\n\n for (const i in attrs) {\n if (typeof attrs[i] === 'number') {\n attrs[i] = Math.round(attrs[i] * factor) / factor\n }\n }\n\n this.attr(attrs)\n return this\n }\n\n // Import / Export raw svg\n svg(svgOrFn, outerSVG) {\n return this.xml(svgOrFn, outerSVG, svg)\n }\n\n // Return id on string conversion\n toString() {\n return this.id()\n }\n\n words(text) {\n // This is faster than removing all children and adding a new one\n this.node.textContent = text\n return this\n }\n\n wrap(node) {\n const parent = this.parent()\n\n if (!parent) {\n return this.addTo(node)\n }\n\n const position = parent.index(this)\n return parent.put(node, position).put(this)\n }\n\n // write svgjs data to the dom\n writeDataToDom() {\n // dump variables recursively\n this.each(function () {\n this.writeDataToDom()\n })\n\n return this\n }\n\n // Import / Export raw svg\n xml(xmlOrFn, outerXML, ns) {\n if (typeof xmlOrFn === 'boolean') {\n ns = outerXML\n outerXML = xmlOrFn\n xmlOrFn = null\n }\n\n // act as getter if no svg string is given\n if (xmlOrFn == null || typeof xmlOrFn === 'function') {\n // The default for exports is, that the outerNode is included\n outerXML = outerXML == null ? true : outerXML\n\n // write svgjs data to the dom\n this.writeDataToDom()\n let current = this\n\n // An export modifier was passed\n if (xmlOrFn != null) {\n current = adopt(current.node.cloneNode(true))\n\n // If the user wants outerHTML we need to process this node, too\n if (outerXML) {\n const result = xmlOrFn(current)\n current = result || current\n\n // The user does not want this node? Well, then he gets nothing\n if (result === false) return ''\n }\n\n // Deep loop through all children and apply modifier\n current.each(function () {\n const result = xmlOrFn(this)\n const _this = result || this\n\n // If modifier returns false, discard node\n if (result === false) {\n this.remove()\n\n // If modifier returns new node, use it\n } else if (result && this !== _this) {\n this.replace(_this)\n }\n }, true)\n }\n\n // Return outer or inner content\n return outerXML ? current.node.outerHTML : current.node.innerHTML\n }\n\n // Act as setter if we got a string\n\n // The default for import is, that the current node is not replaced\n outerXML = outerXML == null ? false : outerXML\n\n // Create temporary holder\n const well = create('wrapper', ns)\n const fragment = globals.document.createDocumentFragment()\n\n // Dump raw svg\n well.innerHTML = xmlOrFn\n\n // Transplant nodes into the fragment\n for (let len = well.children.length; len--; ) {\n fragment.appendChild(well.firstElementChild)\n }\n\n const parent = this.parent()\n\n // Add the whole fragment at once\n return outerXML ? this.replace(fragment) && parent : this.add(fragment)\n }\n}\n\nextend(Dom, { attr, find, findOne })\nregister(Dom, 'Dom')\n","import { bbox, rbox, inside } from '../types/Box.js'\nimport { ctm, screenCTM } from '../types/Matrix.js'\nimport {\n extend,\n getClass,\n makeInstance,\n register,\n root\n} from '../utils/adopter.js'\nimport { globals } from '../utils/window.js'\nimport { point } from '../types/Point.js'\nimport { proportionalSize, writeDataToDom } from '../utils/utils.js'\nimport { reference } from '../modules/core/regex.js'\nimport Dom from './Dom.js'\nimport List from '../types/List.js'\nimport SVGNumber from '../types/SVGNumber.js'\n\nexport default class Element extends Dom {\n constructor(node, attrs) {\n super(node, attrs)\n\n // initialize data object\n this.dom = {}\n\n // create circular reference\n this.node.instance = this\n\n if (node.hasAttribute('data-svgjs') || node.hasAttribute('svgjs:data')) {\n // pull svgjs data from the dom (getAttributeNS doesn't work in html5)\n this.setData(\n JSON.parse(node.getAttribute('data-svgjs')) ??\n JSON.parse(node.getAttribute('svgjs:data')) ??\n {}\n )\n }\n }\n\n // Move element by its center\n center(x, y) {\n return this.cx(x).cy(y)\n }\n\n // Move by center over x-axis\n cx(x) {\n return x == null\n ? this.x() + this.width() / 2\n : this.x(x - this.width() / 2)\n }\n\n // Move by center over y-axis\n cy(y) {\n return y == null\n ? this.y() + this.height() / 2\n : this.y(y - this.height() / 2)\n }\n\n // Get defs\n defs() {\n const root = this.root()\n return root && root.defs()\n }\n\n // Relative move over x and y axes\n dmove(x, y) {\n return this.dx(x).dy(y)\n }\n\n // Relative move over x axis\n dx(x = 0) {\n return this.x(new SVGNumber(x).plus(this.x()))\n }\n\n // Relative move over y axis\n dy(y = 0) {\n return this.y(new SVGNumber(y).plus(this.y()))\n }\n\n getEventHolder() {\n return this\n }\n\n // Set height of element\n height(height) {\n return this.attr('height', height)\n }\n\n // Move element to given x and y values\n move(x, y) {\n return this.x(x).y(y)\n }\n\n // return array of all ancestors of given type up to the root svg\n parents(until = this.root()) {\n const isSelector = typeof until === 'string'\n if (!isSelector) {\n until = makeInstance(until)\n }\n const parents = new List()\n let parent = this\n\n while (\n (parent = parent.parent()) &&\n parent.node !== globals.document &&\n parent.nodeName !== '#document-fragment'\n ) {\n parents.push(parent)\n\n if (!isSelector && parent.node === until.node) {\n break\n }\n if (isSelector && parent.matches(until)) {\n break\n }\n if (parent.node === this.root().node) {\n // We worked our way to the root and didn't match `until`\n return null\n }\n }\n\n return parents\n }\n\n // Get referenced element form attribute value\n reference(attr) {\n attr = this.attr(attr)\n if (!attr) return null\n\n const m = (attr + '').match(reference)\n return m ? makeInstance(m[1]) : null\n }\n\n // Get parent document\n root() {\n const p = this.parent(getClass(root))\n return p && p.root()\n }\n\n // set given data to the elements data property\n setData(o) {\n this.dom = o\n return this\n }\n\n // Set element size to given width and height\n size(width, height) {\n const p = proportionalSize(this, width, height)\n\n return this.width(new SVGNumber(p.width)).height(new SVGNumber(p.height))\n }\n\n // Set width of element\n width(width) {\n return this.attr('width', width)\n }\n\n // write svgjs data to the dom\n writeDataToDom() {\n writeDataToDom(this, this.dom)\n return super.writeDataToDom()\n }\n\n // Move over x-axis\n x(x) {\n return this.attr('x', x)\n }\n\n // Move over y-axis\n y(y) {\n return this.attr('y', y)\n }\n}\n\nextend(Element, {\n bbox,\n rbox,\n inside,\n point,\n ctm,\n screenCTM\n})\n\nregister(Element, 'Element')\n","import { registerMethods } from '../../utils/methods.js'\nimport Color from '../../types/Color.js'\nimport Element from '../../elements/Element.js'\nimport Matrix from '../../types/Matrix.js'\nimport Point from '../../types/Point.js'\nimport SVGNumber from '../../types/SVGNumber.js'\n\n// Define list of available attributes for stroke and fill\nconst sugar = {\n stroke: [\n 'color',\n 'width',\n 'opacity',\n 'linecap',\n 'linejoin',\n 'miterlimit',\n 'dasharray',\n 'dashoffset'\n ],\n fill: ['color', 'opacity', 'rule'],\n prefix: function (t, a) {\n return a === 'color' ? t : t + '-' + a\n }\n}\n\n// Add sugar for fill and stroke\n;['fill', 'stroke'].forEach(function (m) {\n const extension = {}\n let i\n\n extension[m] = function (o) {\n if (typeof o === 'undefined') {\n return this.attr(m)\n }\n if (\n typeof o === 'string' ||\n o instanceof Color ||\n Color.isRgb(o) ||\n o instanceof Element\n ) {\n this.attr(m, o)\n } else {\n // set all attributes from sugar.fill and sugar.stroke list\n for (i = sugar[m].length - 1; i >= 0; i--) {\n if (o[sugar[m][i]] != null) {\n this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]])\n }\n }\n }\n\n return this\n }\n\n registerMethods(['Element', 'Runner'], extension)\n})\n\nregisterMethods(['Element', 'Runner'], {\n // Let the user set the matrix directly\n matrix: function (mat, b, c, d, e, f) {\n // Act as a getter\n if (mat == null) {\n return new Matrix(this)\n }\n\n // Act as a setter, the user can pass a matrix or a set of numbers\n return this.attr('transform', new Matrix(mat, b, c, d, e, f))\n },\n\n // Map rotation to transform\n rotate: function (angle, cx, cy) {\n return this.transform({ rotate: angle, ox: cx, oy: cy }, true)\n },\n\n // Map skew to transform\n skew: function (x, y, cx, cy) {\n return arguments.length === 1 || arguments.length === 3\n ? this.transform({ skew: x, ox: y, oy: cx }, true)\n : this.transform({ skew: [x, y], ox: cx, oy: cy }, true)\n },\n\n shear: function (lam, cx, cy) {\n return this.transform({ shear: lam, ox: cx, oy: cy }, true)\n },\n\n // Map scale to transform\n scale: function (x, y, cx, cy) {\n return arguments.length === 1 || arguments.length === 3\n ? this.transform({ scale: x, ox: y, oy: cx }, true)\n : this.transform({ scale: [x, y], ox: cx, oy: cy }, true)\n },\n\n // Map translate to transform\n translate: function (x, y) {\n return this.transform({ translate: [x, y] }, true)\n },\n\n // Map relative translations to transform\n relative: function (x, y) {\n return this.transform({ relative: [x, y] }, true)\n },\n\n // Map flip to transform\n flip: function (direction = 'both', origin = 'center') {\n if ('xybothtrue'.indexOf(direction) === -1) {\n origin = direction\n direction = 'both'\n }\n\n return this.transform({ flip: direction, origin: origin }, true)\n },\n\n // Opacity\n opacity: function (value) {\n return this.attr('opacity', value)\n }\n})\n\nregisterMethods('radius', {\n // Add x and y radius\n radius: function (x, y = x) {\n const type = (this._element || this).type\n return type === 'radialGradient'\n ? this.attr('r', new SVGNumber(x))\n : this.rx(x).ry(y)\n }\n})\n\nregisterMethods('Path', {\n // Get path length\n length: function () {\n return this.node.getTotalLength()\n },\n // Get point at length\n pointAt: function (length) {\n return new Point(this.node.getPointAtLength(length))\n }\n})\n\nregisterMethods(['Element', 'Runner'], {\n // Set font\n font: function (a, v) {\n if (typeof a === 'object') {\n for (v in a) this.font(v, a[v])\n return this\n }\n\n return a === 'leading'\n ? this.leading(v)\n : a === 'anchor'\n ? this.attr('text-anchor', v)\n : a === 'size' ||\n a === 'family' ||\n a === 'weight' ||\n a === 'stretch' ||\n a === 'variant' ||\n a === 'style'\n ? this.attr('font-' + a, v)\n : this.attr(a, v)\n }\n})\n\n// Add events to elements\nconst methods = [\n 'click',\n 'dblclick',\n 'mousedown',\n 'mouseup',\n 'mouseover',\n 'mouseout',\n 'mousemove',\n 'mouseenter',\n 'mouseleave',\n 'touchstart',\n 'touchmove',\n 'touchleave',\n 'touchend',\n 'touchcancel',\n 'contextmenu',\n 'wheel',\n 'pointerdown',\n 'pointermove',\n 'pointerup',\n 'pointerleave',\n 'pointercancel'\n].reduce(function (last, event) {\n // add event to Element\n const fn = function (f) {\n if (f === null) {\n this.off(event)\n } else {\n this.on(event, f)\n }\n return this\n }\n\n last[event] = fn\n return last\n}, {})\n\nregisterMethods('Element', methods)\n","import { getOrigin, isDescriptive } from '../../utils/utils.js'\nimport { delimiter, transforms } from '../core/regex.js'\nimport { registerMethods } from '../../utils/methods.js'\nimport Matrix from '../../types/Matrix.js'\n\n// Reset all transformations\nexport function untransform() {\n return this.attr('transform', null)\n}\n\n// merge the whole transformation chain into one matrix and returns it\nexport function matrixify() {\n const matrix = (this.attr('transform') || '')\n // split transformations\n .split(transforms)\n .slice(0, -1)\n .map(function (str) {\n // generate key => value pairs\n const kv = str.trim().split('(')\n return [\n kv[0],\n kv[1].split(delimiter).map(function (str) {\n return parseFloat(str)\n })\n ]\n })\n .reverse()\n // merge every transformation into one matrix\n .reduce(function (matrix, transform) {\n if (transform[0] === 'matrix') {\n return matrix.lmultiply(Matrix.fromArray(transform[1]))\n }\n return matrix[transform[0]].apply(matrix, transform[1])\n }, new Matrix())\n\n return matrix\n}\n\n// add an element to another parent without changing the visual representation on the screen\nexport function toParent(parent, i) {\n if (this === parent) return this\n\n if (isDescriptive(this.node)) return this.addTo(parent, i)\n\n const ctm = this.screenCTM()\n const pCtm = parent.screenCTM().inverse()\n\n this.addTo(parent, i).untransform().transform(pCtm.multiply(ctm))\n\n return this\n}\n\n// same as above with parent equals root-svg\nexport function toRoot(i) {\n return this.toParent(this.root(), i)\n}\n\n// Add transformations\nexport function transform(o, relative) {\n // Act as a getter if no object was passed\n if (o == null || typeof o === 'string') {\n const decomposed = new Matrix(this).decompose()\n return o == null ? decomposed : decomposed[o]\n }\n\n if (!Matrix.isMatrixLike(o)) {\n // Set the origin according to the defined transform\n o = { ...o, origin: getOrigin(o, this) }\n }\n\n // The user can pass a boolean, an Element or an Matrix or nothing\n const cleanRelative = relative === true ? this : relative || false\n const result = new Matrix(cleanRelative).transform(o)\n return this.attr('transform', result)\n}\n\nregisterMethods('Element', {\n untransform,\n matrixify,\n toParent,\n toRoot,\n transform\n})\n","import { register } from '../utils/adopter.js'\nimport Element from './Element.js'\n\nexport default class Container extends Element {\n flatten() {\n this.each(function () {\n if (this instanceof Container) {\n return this.flatten().ungroup()\n }\n })\n\n return this\n }\n\n ungroup(parent = this.parent(), index = parent.index(this)) {\n // when parent != this, we want append all elements to the end\n index = index === -1 ? parent.children().length : index\n\n this.each(function (i, children) {\n // reverse each\n return children[children.length - i - 1].toParent(parent, index)\n })\n\n return this.remove()\n }\n}\n\nregister(Container, 'Container')\n","import { nodeOrNew, register } from '../utils/adopter.js'\nimport Container from './Container.js'\n\nexport default class Defs extends Container {\n constructor(node, attrs = node) {\n super(nodeOrNew('defs', node), attrs)\n }\n\n flatten() {\n return this\n }\n\n ungroup() {\n return this\n }\n}\n\nregister(Defs, 'Defs')\n","import { register } from '../utils/adopter.js'\nimport Element from './Element.js'\n\nexport default class Shape extends Element {}\n\nregister(Shape, 'Shape')\n","import SVGNumber from '../../types/SVGNumber.js'\n\n// Radius x value\nexport function rx(rx) {\n return this.attr('rx', rx)\n}\n\n// Radius y value\nexport function ry(ry) {\n return this.attr('ry', ry)\n}\n\n// Move over x-axis\nexport function x(x) {\n return x == null ? this.cx() - this.rx() : this.cx(x + this.rx())\n}\n\n// Move over y-axis\nexport function y(y) {\n return y == null ? this.cy() - this.ry() : this.cy(y + this.ry())\n}\n\n// Move by center over x-axis\nexport function cx(x) {\n return this.attr('cx', x)\n}\n\n// Move by center over y-axis\nexport function cy(y) {\n return this.attr('cy', y)\n}\n\n// Set width of element\nexport function width(width) {\n return width == null ? this.rx() * 2 : this.rx(new SVGNumber(width).divide(2))\n}\n\n// Set height of element\nexport function height(height) {\n return height == null\n ? this.ry() * 2\n : this.ry(new SVGNumber(height).divide(2))\n}\n","import {\n extend,\n nodeOrNew,\n register,\n wrapWithAttrCheck\n} from '../utils/adopter.js'\nimport { proportionalSize } from '../utils/utils.js'\nimport { registerMethods } from '../utils/methods.js'\nimport SVGNumber from '../types/SVGNumber.js'\nimport Shape from './Shape.js'\nimport * as circled from '../modules/core/circled.js'\n\nexport default class Ellipse extends Shape {\n constructor(node, attrs = node) {\n super(nodeOrNew('ellipse', node), attrs)\n }\n\n size(width, height) {\n const p = proportionalSize(this, width, height)\n\n return this.rx(new SVGNumber(p.width).divide(2)).ry(\n new SVGNumber(p.height).divide(2)\n )\n }\n}\n\nextend(Ellipse, circled)\n\nregisterMethods('Container', {\n // Create an ellipse\n ellipse: wrapWithAttrCheck(function (width = 0, height = width) {\n return this.put(new Ellipse()).size(width, height).move(0, 0)\n })\n})\n\nregister(Ellipse, 'Ellipse')\n","import Dom from './Dom.js'\nimport { globals } from '../utils/window.js'\nimport { register, create } from '../utils/adopter.js'\n\nclass Fragment extends Dom {\n constructor(node = globals.document.createDocumentFragment()) {\n super(node)\n }\n\n // Import / Export raw xml\n xml(xmlOrFn, outerXML, ns) {\n if (typeof xmlOrFn === 'boolean') {\n ns = outerXML\n outerXML = xmlOrFn\n xmlOrFn = null\n }\n\n // because this is a fragment we have to put all elements into a wrapper first\n // before we can get the innerXML from it\n if (xmlOrFn == null || typeof xmlOrFn === 'function') {\n const wrapper = new Dom(create('wrapper', ns))\n wrapper.add(this.node.cloneNode(true))\n\n return wrapper.xml(false, ns)\n }\n\n // Act as setter if we got a string\n return super.xml(xmlOrFn, false, ns)\n }\n}\n\nregister(Fragment, 'Fragment')\n\nexport default Fragment\n","import SVGNumber from '../../types/SVGNumber.js'\n\nexport function from(x, y) {\n return (this._element || this).type === 'radialGradient'\n ? this.attr({ fx: new SVGNumber(x), fy: new SVGNumber(y) })\n : this.attr({ x1: new SVGNumber(x), y1: new SVGNumber(y) })\n}\n\nexport function to(x, y) {\n return (this._element || this).type === 'radialGradient'\n ? this.attr({ cx: new SVGNumber(x), cy: new SVGNumber(y) })\n : this.attr({ x2: new SVGNumber(x), y2: new SVGNumber(y) })\n}\n","import {\n extend,\n nodeOrNew,\n register,\n wrapWithAttrCheck\n} from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport Box from '../types/Box.js'\nimport Container from './Container.js'\nimport baseFind from '../modules/core/selector.js'\nimport * as gradiented from '../modules/core/gradiented.js'\n\nexport default class Gradient extends Container {\n constructor(type, attrs) {\n super(\n nodeOrNew(type + 'Gradient', typeof type === 'string' ? null : type),\n attrs\n )\n }\n\n // custom attr to handle transform\n attr(a, b, c) {\n if (a === 'transform') a = 'gradientTransform'\n return super.attr(a, b, c)\n }\n\n bbox() {\n return new Box()\n }\n\n targets() {\n return baseFind('svg [fill*=' + this.id() + ']')\n }\n\n // Alias string conversion to fill\n toString() {\n return this.url()\n }\n\n // Update gradient\n update(block) {\n // remove all stops\n this.clear()\n\n // invoke passed block\n if (typeof block === 'function') {\n block.call(this, this)\n }\n\n return this\n }\n\n // Return the fill id\n url() {\n return 'url(#' + this.id() + ')'\n }\n}\n\nextend(Gradient, gradiented)\n\nregisterMethods({\n Container: {\n // Create gradient element in defs\n gradient(...args) {\n return this.defs().gradient(...args)\n }\n },\n // define gradient\n Defs: {\n gradient: wrapWithAttrCheck(function (type, block) {\n return this.put(new Gradient(type)).update(block)\n })\n }\n})\n\nregister(Gradient, 'Gradient')\n","import { nodeOrNew, register, wrapWithAttrCheck } from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport Box from '../types/Box.js'\nimport Container from './Container.js'\nimport baseFind from '../modules/core/selector.js'\n\nexport default class Pattern extends Container {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('pattern', node), attrs)\n }\n\n // custom attr to handle transform\n attr(a, b, c) {\n if (a === 'transform') a = 'patternTransform'\n return super.attr(a, b, c)\n }\n\n bbox() {\n return new Box()\n }\n\n targets() {\n return baseFind('svg [fill*=' + this.id() + ']')\n }\n\n // Alias string conversion to fill\n toString() {\n return this.url()\n }\n\n // Update pattern by rebuilding\n update(block) {\n // remove content\n this.clear()\n\n // invoke passed block\n if (typeof block === 'function') {\n block.call(this, this)\n }\n\n return this\n }\n\n // Return the fill id\n url() {\n return 'url(#' + this.id() + ')'\n }\n}\n\nregisterMethods({\n Container: {\n // Create pattern element in defs\n pattern(...args) {\n return this.defs().pattern(...args)\n }\n },\n Defs: {\n pattern: wrapWithAttrCheck(function (width, height, block) {\n return this.put(new Pattern()).update(block).attr({\n x: 0,\n y: 0,\n width: width,\n height: height,\n patternUnits: 'userSpaceOnUse'\n })\n })\n }\n})\n\nregister(Pattern, 'Pattern')\n","import { isImage } from '../modules/core/regex.js'\nimport { nodeOrNew, register, wrapWithAttrCheck } from '../utils/adopter.js'\nimport { off, on } from '../modules/core/event.js'\nimport { registerAttrHook } from '../modules/core/attr.js'\nimport { registerMethods } from '../utils/methods.js'\nimport { xlink } from '../modules/core/namespaces.js'\nimport Pattern from './Pattern.js'\nimport Shape from './Shape.js'\nimport { globals } from '../utils/window.js'\n\nexport default class Image extends Shape {\n constructor(node, attrs = node) {\n super(nodeOrNew('image', node), attrs)\n }\n\n // (re)load image\n load(url, callback) {\n if (!url) return this\n\n const img = new globals.window.Image()\n\n on(\n img,\n 'load',\n function (e) {\n const p = this.parent(Pattern)\n\n // ensure image size\n if (this.width() === 0 && this.height() === 0) {\n this.size(img.width, img.height)\n }\n\n if (p instanceof Pattern) {\n // ensure pattern size if not set\n if (p.width() === 0 && p.height() === 0) {\n p.size(this.width(), this.height())\n }\n }\n\n if (typeof callback === 'function') {\n callback.call(this, e)\n }\n },\n this\n )\n\n on(img, 'load error', function () {\n // dont forget to unbind memory leaking events\n off(img)\n })\n\n return this.attr('href', (img.src = url), xlink)\n }\n}\n\nregisterAttrHook(function (attr, val, _this) {\n // convert image fill and stroke to patterns\n if (attr === 'fill' || attr === 'stroke') {\n if (isImage.test(val)) {\n val = _this.root().defs().image(val)\n }\n }\n\n if (val instanceof Image) {\n val = _this\n .root()\n .defs()\n .pattern(0, 0, (pattern) => {\n pattern.add(val)\n })\n }\n\n return val\n})\n\nregisterMethods({\n Container: {\n // create image element, load image and set its size\n image: wrapWithAttrCheck(function (source, callback) {\n return this.put(new Image()).size(0, 0).load(source, callback)\n })\n }\n})\n\nregister(Image, 'Image')\n","import { delimiter } from '../modules/core/regex.js'\nimport SVGArray from './SVGArray.js'\nimport Box from './Box.js'\nimport Matrix from './Matrix.js'\n\nexport default class PointArray extends SVGArray {\n // Get bounding box of points\n bbox() {\n let maxX = -Infinity\n let maxY = -Infinity\n let minX = Infinity\n let minY = Infinity\n this.forEach(function (el) {\n maxX = Math.max(el[0], maxX)\n maxY = Math.max(el[1], maxY)\n minX = Math.min(el[0], minX)\n minY = Math.min(el[1], minY)\n })\n return new Box(minX, minY, maxX - minX, maxY - minY)\n }\n\n // Move point string\n move(x, y) {\n const box = this.bbox()\n\n // get relative offset\n x -= box.x\n y -= box.y\n\n // move every point\n if (!isNaN(x) && !isNaN(y)) {\n for (let i = this.length - 1; i >= 0; i--) {\n this[i] = [this[i][0] + x, this[i][1] + y]\n }\n }\n\n return this\n }\n\n // Parse point string and flat array\n parse(array = [0, 0]) {\n const points = []\n\n // if it is an array, we flatten it and therefore clone it to 1 depths\n if (array instanceof Array) {\n array = Array.prototype.concat.apply([], array)\n } else {\n // Else, it is considered as a string\n // parse points\n array = array.trim().split(delimiter).map(parseFloat)\n }\n\n // validate points - https://svgwg.org/svg2-draft/shapes.html#DataTypePoints\n // Odd number of coordinates is an error. In such cases, drop the last odd coordinate.\n if (array.length % 2 !== 0) array.pop()\n\n // wrap points in two-tuples\n for (let i = 0, len = array.length; i < len; i = i + 2) {\n points.push([array[i], array[i + 1]])\n }\n\n return points\n }\n\n // Resize poly string\n size(width, height) {\n let i\n const box = this.bbox()\n\n // recalculate position of all points according to new size\n for (i = this.length - 1; i >= 0; i--) {\n if (box.width)\n this[i][0] = ((this[i][0] - box.x) * width) / box.width + box.x\n if (box.height)\n this[i][1] = ((this[i][1] - box.y) * height) / box.height + box.y\n }\n\n return this\n }\n\n // Convert array to line object\n toLine() {\n return {\n x1: this[0][0],\n y1: this[0][1],\n x2: this[1][0],\n y2: this[1][1]\n }\n }\n\n // Convert array to string\n toString() {\n const array = []\n // convert to a poly point string\n for (let i = 0, il = this.length; i < il; i++) {\n array.push(this[i].join(','))\n }\n\n return array.join(' ')\n }\n\n transform(m) {\n return this.clone().transformO(m)\n }\n\n // transform points with matrix (similar to Point.transform)\n transformO(m) {\n if (!Matrix.isMatrixLike(m)) {\n m = new Matrix(m)\n }\n\n for (let i = this.length; i--; ) {\n // Perform the matrix multiplication\n const [x, y] = this[i]\n this[i][0] = m.a * x + m.c * y + m.e\n this[i][1] = m.b * x + m.d * y + m.f\n }\n\n return this\n }\n}\n","import PointArray from '../../types/PointArray.js'\n\nexport const MorphArray = PointArray\n\n// Move by left top corner over x-axis\nexport function x(x) {\n return x == null ? this.bbox().x : this.move(x, this.bbox().y)\n}\n\n// Move by left top corner over y-axis\nexport function y(y) {\n return y == null ? this.bbox().y : this.move(this.bbox().x, y)\n}\n\n// Set width of element\nexport function width(width) {\n const b = this.bbox()\n return width == null ? b.width : this.size(width, b.height)\n}\n\n// Set height of element\nexport function height(height) {\n const b = this.bbox()\n return height == null ? b.height : this.size(b.width, height)\n}\n","import {\n extend,\n nodeOrNew,\n register,\n wrapWithAttrCheck\n} from '../utils/adopter.js'\nimport { proportionalSize } from '../utils/utils.js'\nimport { registerMethods } from '../utils/methods.js'\nimport PointArray from '../types/PointArray.js'\nimport Shape from './Shape.js'\nimport * as pointed from '../modules/core/pointed.js'\n\nexport default class Line extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('line', node), attrs)\n }\n\n // Get array\n array() {\n return new PointArray([\n [this.attr('x1'), this.attr('y1')],\n [this.attr('x2'), this.attr('y2')]\n ])\n }\n\n // Move by left top corner\n move(x, y) {\n return this.attr(this.array().move(x, y).toLine())\n }\n\n // Overwrite native plot() method\n plot(x1, y1, x2, y2) {\n if (x1 == null) {\n return this.array()\n } else if (typeof y1 !== 'undefined') {\n x1 = { x1, y1, x2, y2 }\n } else {\n x1 = new PointArray(x1).toLine()\n }\n\n return this.attr(x1)\n }\n\n // Set element size to given width and height\n size(width, height) {\n const p = proportionalSize(this, width, height)\n return this.attr(this.array().size(p.width, p.height).toLine())\n }\n}\n\nextend(Line, pointed)\n\nregisterMethods({\n Container: {\n // Create a line element\n line: wrapWithAttrCheck(function (...args) {\n // make sure plot is called as a setter\n // x1 is not necessarily a number, it can also be an array, a string and a PointArray\n return Line.prototype.plot.apply(\n this.put(new Line()),\n args[0] != null ? args : [0, 0, 0, 0]\n )\n })\n }\n})\n\nregister(Line, 'Line')\n","import { nodeOrNew, register, wrapWithAttrCheck } from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport Container from './Container.js'\n\nexport default class Marker extends Container {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('marker', node), attrs)\n }\n\n // Set height of element\n height(height) {\n return this.attr('markerHeight', height)\n }\n\n orient(orient) {\n return this.attr('orient', orient)\n }\n\n // Set marker refX and refY\n ref(x, y) {\n return this.attr('refX', x).attr('refY', y)\n }\n\n // Return the fill id\n toString() {\n return 'url(#' + this.id() + ')'\n }\n\n // Update marker\n update(block) {\n // remove all content\n this.clear()\n\n // invoke passed block\n if (typeof block === 'function') {\n block.call(this, this)\n }\n\n return this\n }\n\n // Set width of element\n width(width) {\n return this.attr('markerWidth', width)\n }\n}\n\nregisterMethods({\n Container: {\n marker(...args) {\n // Create marker element in defs\n return this.defs().marker(...args)\n }\n },\n Defs: {\n // Create marker\n marker: wrapWithAttrCheck(function (width, height, block) {\n // Set default viewbox to match the width and height, set ref to cx and cy and set orient to auto\n return this.put(new Marker())\n .size(width, height)\n .ref(width / 2, height / 2)\n .viewbox(0, 0, width, height)\n .attr('orient', 'auto')\n .update(block)\n })\n },\n marker: {\n // Create and attach markers\n marker(marker, width, height, block) {\n let attr = ['marker']\n\n // Build attribute name\n if (marker !== 'all') attr.push(marker)\n attr = attr.join('-')\n\n // Set marker attribute\n marker =\n arguments[1] instanceof Marker\n ? arguments[1]\n : this.defs().marker(width, height, block)\n\n return this.attr(attr, marker)\n }\n }\n})\n\nregister(Marker, 'Marker')\n","import { timeline } from '../modules/core/defaults.js'\nimport { extend } from '../utils/adopter.js'\n\n/***\nBase Class\n==========\nThe base stepper class that will be\n***/\n\nfunction makeSetterGetter(k, f) {\n return function (v) {\n if (v == null) return this[k]\n this[k] = v\n if (f) f.call(this)\n return this\n }\n}\n\nexport const easing = {\n '-': function (pos) {\n return pos\n },\n '<>': function (pos) {\n return -Math.cos(pos * Math.PI) / 2 + 0.5\n },\n '>': function (pos) {\n return Math.sin((pos * Math.PI) / 2)\n },\n '<': function (pos) {\n return -Math.cos((pos * Math.PI) / 2) + 1\n },\n bezier: function (x1, y1, x2, y2) {\n // see https://www.w3.org/TR/css-easing-1/#cubic-bezier-algo\n return function (t) {\n if (t < 0) {\n if (x1 > 0) {\n return (y1 / x1) * t\n } else if (x2 > 0) {\n return (y2 / x2) * t\n } else {\n return 0\n }\n } else if (t > 1) {\n if (x2 < 1) {\n return ((1 - y2) / (1 - x2)) * t + (y2 - x2) / (1 - x2)\n } else if (x1 < 1) {\n return ((1 - y1) / (1 - x1)) * t + (y1 - x1) / (1 - x1)\n } else {\n return 1\n }\n } else {\n return 3 * t * (1 - t) ** 2 * y1 + 3 * t ** 2 * (1 - t) * y2 + t ** 3\n }\n }\n },\n // see https://www.w3.org/TR/css-easing-1/#step-timing-function-algo\n steps: function (steps, stepPosition = 'end') {\n // deal with \"jump-\" prefix\n stepPosition = stepPosition.split('-').reverse()[0]\n\n let jumps = steps\n if (stepPosition === 'none') {\n --jumps\n } else if (stepPosition === 'both') {\n ++jumps\n }\n\n // The beforeFlag is essentially useless\n return (t, beforeFlag = false) => {\n // Step is called currentStep in referenced url\n let step = Math.floor(t * steps)\n const jumping = (t * step) % 1 === 0\n\n if (stepPosition === 'start' || stepPosition === 'both') {\n ++step\n }\n\n if (beforeFlag && jumping) {\n --step\n }\n\n if (t >= 0 && step < 0) {\n step = 0\n }\n\n if (t <= 1 && step > jumps) {\n step = jumps\n }\n\n return step / jumps\n }\n }\n}\n\nexport class Stepper {\n done() {\n return false\n }\n}\n\n/***\nEasing Functions\n================\n***/\n\nexport class Ease extends Stepper {\n constructor(fn = timeline.ease) {\n super()\n this.ease = easing[fn] || fn\n }\n\n step(from, to, pos) {\n if (typeof from !== 'number') {\n return pos < 1 ? from : to\n }\n return from + (to - from) * this.ease(pos)\n }\n}\n\n/***\nController Types\n================\n***/\n\nexport class Controller extends Stepper {\n constructor(fn) {\n super()\n this.stepper = fn\n }\n\n done(c) {\n return c.done\n }\n\n step(current, target, dt, c) {\n return this.stepper(current, target, dt, c)\n }\n}\n\nfunction recalculate() {\n // Apply the default parameters\n const duration = (this._duration || 500) / 1000\n const overshoot = this._overshoot || 0\n\n // Calculate the PID natural response\n const eps = 1e-10\n const pi = Math.PI\n const os = Math.log(overshoot / 100 + eps)\n const zeta = -os / Math.sqrt(pi * pi + os * os)\n const wn = 3.9 / (zeta * duration)\n\n // Calculate the Spring values\n this.d = 2 * zeta * wn\n this.k = wn * wn\n}\n\nexport class Spring extends Controller {\n constructor(duration = 500, overshoot = 0) {\n super()\n this.duration(duration).overshoot(overshoot)\n }\n\n step(current, target, dt, c) {\n if (typeof current === 'string') return current\n c.done = dt === Infinity\n if (dt === Infinity) return target\n if (dt === 0) return current\n\n if (dt > 100) dt = 16\n\n dt /= 1000\n\n // Get the previous velocity\n const velocity = c.velocity || 0\n\n // Apply the control to get the new position and store it\n const acceleration = -this.d * velocity - this.k * (current - target)\n const newPosition = current + velocity * dt + (acceleration * dt * dt) / 2\n\n // Store the velocity\n c.velocity = velocity + acceleration * dt\n\n // Figure out if we have converged, and if so, pass the value\n c.done = Math.abs(target - newPosition) + Math.abs(velocity) < 0.002\n return c.done ? target : newPosition\n }\n}\n\nextend(Spring, {\n duration: makeSetterGetter('_duration', recalculate),\n overshoot: makeSetterGetter('_overshoot', recalculate)\n})\n\nexport class PID extends Controller {\n constructor(p = 0.1, i = 0.01, d = 0, windup = 1000) {\n super()\n this.p(p).i(i).d(d).windup(windup)\n }\n\n step(current, target, dt, c) {\n if (typeof current === 'string') return current\n c.done = dt === Infinity\n\n if (dt === Infinity) return target\n if (dt === 0) return current\n\n const p = target - current\n let i = (c.integral || 0) + p * dt\n const d = (p - (c.error || 0)) / dt\n const windup = this._windup\n\n // antiwindup\n if (windup !== false) {\n i = Math.max(-windup, Math.min(i, windup))\n }\n\n c.error = p\n c.integral = i\n\n c.done = Math.abs(p) < 0.001\n\n return c.done ? target : current + (this.P * p + this.I * i + this.D * d)\n }\n}\n\nextend(PID, {\n windup: makeSetterGetter('_windup'),\n p: makeSetterGetter('P'),\n i: makeSetterGetter('I'),\n d: makeSetterGetter('D')\n})\n","import { isPathLetter } from '../modules/core/regex.js'\nimport Point from '../types/Point.js'\n\nconst segmentParameters = {\n M: 2,\n L: 2,\n H: 1,\n V: 1,\n C: 6,\n S: 4,\n Q: 4,\n T: 2,\n A: 7,\n Z: 0\n}\n\nconst pathHandlers = {\n M: function (c, p, p0) {\n p.x = p0.x = c[0]\n p.y = p0.y = c[1]\n\n return ['M', p.x, p.y]\n },\n L: function (c, p) {\n p.x = c[0]\n p.y = c[1]\n return ['L', c[0], c[1]]\n },\n H: function (c, p) {\n p.x = c[0]\n return ['H', c[0]]\n },\n V: function (c, p) {\n p.y = c[0]\n return ['V', c[0]]\n },\n C: function (c, p) {\n p.x = c[4]\n p.y = c[5]\n return ['C', c[0], c[1], c[2], c[3], c[4], c[5]]\n },\n S: function (c, p) {\n p.x = c[2]\n p.y = c[3]\n return ['S', c[0], c[1], c[2], c[3]]\n },\n Q: function (c, p) {\n p.x = c[2]\n p.y = c[3]\n return ['Q', c[0], c[1], c[2], c[3]]\n },\n T: function (c, p) {\n p.x = c[0]\n p.y = c[1]\n return ['T', c[0], c[1]]\n },\n Z: function (c, p, p0) {\n p.x = p0.x\n p.y = p0.y\n return ['Z']\n },\n A: function (c, p) {\n p.x = c[5]\n p.y = c[6]\n return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]]\n }\n}\n\nconst mlhvqtcsaz = 'mlhvqtcsaz'.split('')\n\nfor (let i = 0, il = mlhvqtcsaz.length; i < il; ++i) {\n pathHandlers[mlhvqtcsaz[i]] = (function (i) {\n return function (c, p, p0) {\n if (i === 'H') c[0] = c[0] + p.x\n else if (i === 'V') c[0] = c[0] + p.y\n else if (i === 'A') {\n c[5] = c[5] + p.x\n c[6] = c[6] + p.y\n } else {\n for (let j = 0, jl = c.length; j < jl; ++j) {\n c[j] = c[j] + (j % 2 ? p.y : p.x)\n }\n }\n\n return pathHandlers[i](c, p, p0)\n }\n })(mlhvqtcsaz[i].toUpperCase())\n}\n\nfunction makeAbsolut(parser) {\n const command = parser.segment[0]\n return pathHandlers[command](parser.segment.slice(1), parser.p, parser.p0)\n}\n\nfunction segmentComplete(parser) {\n return (\n parser.segment.length &&\n parser.segment.length - 1 ===\n segmentParameters[parser.segment[0].toUpperCase()]\n )\n}\n\nfunction startNewSegment(parser, token) {\n parser.inNumber && finalizeNumber(parser, false)\n const pathLetter = isPathLetter.test(token)\n\n if (pathLetter) {\n parser.segment = [token]\n } else {\n const lastCommand = parser.lastCommand\n const small = lastCommand.toLowerCase()\n const isSmall = lastCommand === small\n parser.segment = [small === 'm' ? (isSmall ? 'l' : 'L') : lastCommand]\n }\n\n parser.inSegment = true\n parser.lastCommand = parser.segment[0]\n\n return pathLetter\n}\n\nfunction finalizeNumber(parser, inNumber) {\n if (!parser.inNumber) throw new Error('Parser Error')\n parser.number && parser.segment.push(parseFloat(parser.number))\n parser.inNumber = inNumber\n parser.number = ''\n parser.pointSeen = false\n parser.hasExponent = false\n\n if (segmentComplete(parser)) {\n finalizeSegment(parser)\n }\n}\n\nfunction finalizeSegment(parser) {\n parser.inSegment = false\n if (parser.absolute) {\n parser.segment = makeAbsolut(parser)\n }\n parser.segments.push(parser.segment)\n}\n\nfunction isArcFlag(parser) {\n if (!parser.segment.length) return false\n const isArc = parser.segment[0].toUpperCase() === 'A'\n const length = parser.segment.length\n\n return isArc && (length === 4 || length === 5)\n}\n\nfunction isExponential(parser) {\n return parser.lastToken.toUpperCase() === 'E'\n}\n\nconst pathDelimiters = new Set([' ', ',', '\\t', '\\n', '\\r', '\\f'])\nexport function pathParser(d, toAbsolute = true) {\n let index = 0\n let token = ''\n const parser = {\n segment: [],\n inNumber: false,\n number: '',\n lastToken: '',\n inSegment: false,\n segments: [],\n pointSeen: false,\n hasExponent: false,\n absolute: toAbsolute,\n p0: new Point(),\n p: new Point()\n }\n\n while (((parser.lastToken = token), (token = d.charAt(index++)))) {\n if (!parser.inSegment) {\n if (startNewSegment(parser, token)) {\n continue\n }\n }\n\n if (token === '.') {\n if (parser.pointSeen || parser.hasExponent) {\n finalizeNumber(parser, false)\n --index\n continue\n }\n parser.inNumber = true\n parser.pointSeen = true\n parser.number += token\n continue\n }\n\n if (!isNaN(parseInt(token))) {\n if (parser.number === '0' || isArcFlag(parser)) {\n parser.inNumber = true\n parser.number = token\n finalizeNumber(parser, true)\n continue\n }\n\n parser.inNumber = true\n parser.number += token\n continue\n }\n\n if (pathDelimiters.has(token)) {\n if (parser.inNumber) {\n finalizeNumber(parser, false)\n }\n continue\n }\n\n if (token === '-' || token === '+') {\n if (parser.inNumber && !isExponential(parser)) {\n finalizeNumber(parser, false)\n --index\n continue\n }\n parser.number += token\n parser.inNumber = true\n continue\n }\n\n if (token.toUpperCase() === 'E') {\n parser.number += token\n parser.hasExponent = true\n continue\n }\n\n if (isPathLetter.test(token)) {\n if (parser.inNumber) {\n finalizeNumber(parser, false)\n } else if (!segmentComplete(parser)) {\n throw new Error('parser Error')\n } else {\n finalizeSegment(parser)\n }\n --index\n }\n }\n\n if (parser.inNumber) {\n finalizeNumber(parser, false)\n }\n\n if (parser.inSegment && segmentComplete(parser)) {\n finalizeSegment(parser)\n }\n\n return parser.segments\n}\n","import SVGArray from './SVGArray.js'\nimport parser from '../modules/core/parser.js'\nimport Box from './Box.js'\nimport { pathParser } from '../utils/pathParser.js'\n\nfunction arrayToString(a) {\n let s = ''\n for (let i = 0, il = a.length; i < il; i++) {\n s += a[i][0]\n\n if (a[i][1] != null) {\n s += a[i][1]\n\n if (a[i][2] != null) {\n s += ' '\n s += a[i][2]\n\n if (a[i][3] != null) {\n s += ' '\n s += a[i][3]\n s += ' '\n s += a[i][4]\n\n if (a[i][5] != null) {\n s += ' '\n s += a[i][5]\n s += ' '\n s += a[i][6]\n\n if (a[i][7] != null) {\n s += ' '\n s += a[i][7]\n }\n }\n }\n }\n }\n }\n\n return s + ' '\n}\n\nexport default class PathArray extends SVGArray {\n // Get bounding box of path\n bbox() {\n parser().path.setAttribute('d', this.toString())\n return new Box(parser.nodes.path.getBBox())\n }\n\n // Move path string\n move(x, y) {\n // get bounding box of current situation\n const box = this.bbox()\n\n // get relative offset\n x -= box.x\n y -= box.y\n\n if (!isNaN(x) && !isNaN(y)) {\n // move every point\n for (let l, i = this.length - 1; i >= 0; i--) {\n l = this[i][0]\n\n if (l === 'M' || l === 'L' || l === 'T') {\n this[i][1] += x\n this[i][2] += y\n } else if (l === 'H') {\n this[i][1] += x\n } else if (l === 'V') {\n this[i][1] += y\n } else if (l === 'C' || l === 'S' || l === 'Q') {\n this[i][1] += x\n this[i][2] += y\n this[i][3] += x\n this[i][4] += y\n\n if (l === 'C') {\n this[i][5] += x\n this[i][6] += y\n }\n } else if (l === 'A') {\n this[i][6] += x\n this[i][7] += y\n }\n }\n }\n\n return this\n }\n\n // Absolutize and parse path to array\n parse(d = 'M0 0') {\n if (Array.isArray(d)) {\n d = Array.prototype.concat.apply([], d).toString()\n }\n\n return pathParser(d)\n }\n\n // Resize path string\n size(width, height) {\n // get bounding box of current situation\n const box = this.bbox()\n let i, l\n\n // If the box width or height is 0 then we ignore\n // transformations on the respective axis\n box.width = box.width === 0 ? 1 : box.width\n box.height = box.height === 0 ? 1 : box.height\n\n // recalculate position of all points according to new size\n for (i = this.length - 1; i >= 0; i--) {\n l = this[i][0]\n\n if (l === 'M' || l === 'L' || l === 'T') {\n this[i][1] = ((this[i][1] - box.x) * width) / box.width + box.x\n this[i][2] = ((this[i][2] - box.y) * height) / box.height + box.y\n } else if (l === 'H') {\n this[i][1] = ((this[i][1] - box.x) * width) / box.width + box.x\n } else if (l === 'V') {\n this[i][1] = ((this[i][1] - box.y) * height) / box.height + box.y\n } else if (l === 'C' || l === 'S' || l === 'Q') {\n this[i][1] = ((this[i][1] - box.x) * width) / box.width + box.x\n this[i][2] = ((this[i][2] - box.y) * height) / box.height + box.y\n this[i][3] = ((this[i][3] - box.x) * width) / box.width + box.x\n this[i][4] = ((this[i][4] - box.y) * height) / box.height + box.y\n\n if (l === 'C') {\n this[i][5] = ((this[i][5] - box.x) * width) / box.width + box.x\n this[i][6] = ((this[i][6] - box.y) * height) / box.height + box.y\n }\n } else if (l === 'A') {\n // resize radii\n this[i][1] = (this[i][1] * width) / box.width\n this[i][2] = (this[i][2] * height) / box.height\n\n // move position values\n this[i][6] = ((this[i][6] - box.x) * width) / box.width + box.x\n this[i][7] = ((this[i][7] - box.y) * height) / box.height + box.y\n }\n }\n\n return this\n }\n\n // Convert array to string\n toString() {\n return arrayToString(this)\n }\n}\n","import { Ease } from './Controller.js'\nimport {\n delimiter,\n numberAndUnit,\n isPathLetter\n} from '../modules/core/regex.js'\nimport { extend } from '../utils/adopter.js'\nimport Color from '../types/Color.js'\nimport PathArray from '../types/PathArray.js'\nimport SVGArray from '../types/SVGArray.js'\nimport SVGNumber from '../types/SVGNumber.js'\n\nconst getClassForType = (value) => {\n const type = typeof value\n\n if (type === 'number') {\n return SVGNumber\n } else if (type === 'string') {\n if (Color.isColor(value)) {\n return Color\n } else if (delimiter.test(value)) {\n return isPathLetter.test(value) ? PathArray : SVGArray\n } else if (numberAndUnit.test(value)) {\n return SVGNumber\n } else {\n return NonMorphable\n }\n } else if (morphableTypes.indexOf(value.constructor) > -1) {\n return value.constructor\n } else if (Array.isArray(value)) {\n return SVGArray\n } else if (type === 'object') {\n return ObjectBag\n } else {\n return NonMorphable\n }\n}\n\nexport default class Morphable {\n constructor(stepper) {\n this._stepper = stepper || new Ease('-')\n\n this._from = null\n this._to = null\n this._type = null\n this._context = null\n this._morphObj = null\n }\n\n at(pos) {\n return this._morphObj.morph(\n this._from,\n this._to,\n pos,\n this._stepper,\n this._context\n )\n }\n\n done() {\n const complete = this._context.map(this._stepper.done).reduce(function (\n last,\n curr\n ) {\n return last && curr\n }, true)\n return complete\n }\n\n from(val) {\n if (val == null) {\n return this._from\n }\n\n this._from = this._set(val)\n return this\n }\n\n stepper(stepper) {\n if (stepper == null) return this._stepper\n this._stepper = stepper\n return this\n }\n\n to(val) {\n if (val == null) {\n return this._to\n }\n\n this._to = this._set(val)\n return this\n }\n\n type(type) {\n // getter\n if (type == null) {\n return this._type\n }\n\n // setter\n this._type = type\n return this\n }\n\n _set(value) {\n if (!this._type) {\n this.type(getClassForType(value))\n }\n\n let result = new this._type(value)\n if (this._type === Color) {\n result = this._to\n ? result[this._to[4]]()\n : this._from\n ? result[this._from[4]]()\n : result\n }\n\n if (this._type === ObjectBag) {\n result = this._to\n ? result.align(this._to)\n : this._from\n ? result.align(this._from)\n : result\n }\n\n result = result.toConsumable()\n\n this._morphObj = this._morphObj || new this._type()\n this._context =\n this._context ||\n Array.apply(null, Array(result.length))\n .map(Object)\n .map(function (o) {\n o.done = true\n return o\n })\n return result\n }\n}\n\nexport class NonMorphable {\n constructor(...args) {\n this.init(...args)\n }\n\n init(val) {\n val = Array.isArray(val) ? val[0] : val\n this.value = val\n return this\n }\n\n toArray() {\n return [this.value]\n }\n\n valueOf() {\n return this.value\n }\n}\n\nexport class TransformBag {\n constructor(...args) {\n this.init(...args)\n }\n\n init(obj) {\n if (Array.isArray(obj)) {\n obj = {\n scaleX: obj[0],\n scaleY: obj[1],\n shear: obj[2],\n rotate: obj[3],\n translateX: obj[4],\n translateY: obj[5],\n originX: obj[6],\n originY: obj[7]\n }\n }\n\n Object.assign(this, TransformBag.defaults, obj)\n return this\n }\n\n toArray() {\n const v = this\n\n return [\n v.scaleX,\n v.scaleY,\n v.shear,\n v.rotate,\n v.translateX,\n v.translateY,\n v.originX,\n v.originY\n ]\n }\n}\n\nTransformBag.defaults = {\n scaleX: 1,\n scaleY: 1,\n shear: 0,\n rotate: 0,\n translateX: 0,\n translateY: 0,\n originX: 0,\n originY: 0\n}\n\nconst sortByKey = (a, b) => {\n return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0\n}\n\nexport class ObjectBag {\n constructor(...args) {\n this.init(...args)\n }\n\n align(other) {\n const values = this.values\n for (let i = 0, il = values.length; i < il; ++i) {\n // If the type is the same we only need to check if the color is in the correct format\n if (values[i + 1] === other[i + 1]) {\n if (values[i + 1] === Color && other[i + 7] !== values[i + 7]) {\n const space = other[i + 7]\n const color = new Color(this.values.splice(i + 3, 5))\n [space]()\n .toArray()\n this.values.splice(i + 3, 0, ...color)\n }\n\n i += values[i + 2] + 2\n continue\n }\n\n if (!other[i + 1]) {\n return this\n }\n\n // The types differ, so we overwrite the new type with the old one\n // And initialize it with the types default (e.g. black for color or 0 for number)\n const defaultObject = new other[i + 1]().toArray()\n\n // Than we fix the values array\n const toDelete = values[i + 2] + 3\n\n values.splice(\n i,\n toDelete,\n other[i],\n other[i + 1],\n other[i + 2],\n ...defaultObject\n )\n\n i += values[i + 2] + 2\n }\n return this\n }\n\n init(objOrArr) {\n this.values = []\n\n if (Array.isArray(objOrArr)) {\n this.values = objOrArr.slice()\n return\n }\n\n objOrArr = objOrArr || {}\n const entries = []\n\n for (const i in objOrArr) {\n const Type = getClassForType(objOrArr[i])\n const val = new Type(objOrArr[i]).toArray()\n entries.push([i, Type, val.length, ...val])\n }\n\n entries.sort(sortByKey)\n\n this.values = entries.reduce((last, curr) => last.concat(curr), [])\n return this\n }\n\n toArray() {\n return this.values\n }\n\n valueOf() {\n const obj = {}\n const arr = this.values\n\n // for (var i = 0, len = arr.length; i < len; i += 2) {\n while (arr.length) {\n const key = arr.shift()\n const Type = arr.shift()\n const num = arr.shift()\n const values = arr.splice(0, num)\n obj[key] = new Type(values) // .valueOf()\n }\n\n return obj\n }\n}\n\nconst morphableTypes = [NonMorphable, TransformBag, ObjectBag]\n\nexport function registerMorphableType(type = []) {\n morphableTypes.push(...[].concat(type))\n}\n\nexport function makeMorphable() {\n extend(morphableTypes, {\n to(val) {\n return new Morphable()\n .type(this.constructor)\n .from(this.toArray()) // this.valueOf())\n .to(val)\n },\n fromArray(arr) {\n this.init(arr)\n return this\n },\n toConsumable() {\n return this.toArray()\n },\n morph(from, to, pos, stepper, context) {\n const mapper = function (i, index) {\n return stepper.step(i, to[index], pos, context[index], context)\n }\n\n return this.fromArray(from.map(mapper))\n }\n })\n}\n","import { nodeOrNew, register, wrapWithAttrCheck } from '../utils/adopter.js'\nimport { proportionalSize } from '../utils/utils.js'\nimport { registerMethods } from '../utils/methods.js'\nimport PathArray from '../types/PathArray.js'\nimport Shape from './Shape.js'\n\nexport default class Path extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('path', node), attrs)\n }\n\n // Get array\n array() {\n return this._array || (this._array = new PathArray(this.attr('d')))\n }\n\n // Clear array cache\n clear() {\n delete this._array\n return this\n }\n\n // Set height of element\n height(height) {\n return height == null\n ? this.bbox().height\n : this.size(this.bbox().width, height)\n }\n\n // Move by left top corner\n move(x, y) {\n return this.attr('d', this.array().move(x, y))\n }\n\n // Plot new path\n plot(d) {\n return d == null\n ? this.array()\n : this.clear().attr(\n 'd',\n typeof d === 'string' ? d : (this._array = new PathArray(d))\n )\n }\n\n // Set element size to given width and height\n size(width, height) {\n const p = proportionalSize(this, width, height)\n return this.attr('d', this.array().size(p.width, p.height))\n }\n\n // Set width of element\n width(width) {\n return width == null\n ? this.bbox().width\n : this.size(width, this.bbox().height)\n }\n\n // Move by left top corner over x-axis\n x(x) {\n return x == null ? this.bbox().x : this.move(x, this.bbox().y)\n }\n\n // Move by left top corner over y-axis\n y(y) {\n return y == null ? this.bbox().y : this.move(this.bbox().x, y)\n }\n}\n\n// Define morphable array\nPath.prototype.MorphArray = PathArray\n\n// Add parent method\nregisterMethods({\n Container: {\n // Create a wrapped path element\n path: wrapWithAttrCheck(function (d) {\n // make sure plot is called as a setter\n return this.put(new Path()).plot(d || new PathArray())\n })\n }\n})\n\nregister(Path, 'Path')\n","import { proportionalSize } from '../../utils/utils.js'\nimport PointArray from '../../types/PointArray.js'\n\n// Get array\nexport function array() {\n return this._array || (this._array = new PointArray(this.attr('points')))\n}\n\n// Clear array cache\nexport function clear() {\n delete this._array\n return this\n}\n\n// Move by left top corner\nexport function move(x, y) {\n return this.attr('points', this.array().move(x, y))\n}\n\n// Plot new path\nexport function plot(p) {\n return p == null\n ? this.array()\n : this.clear().attr(\n 'points',\n typeof p === 'string' ? p : (this._array = new PointArray(p))\n )\n}\n\n// Set element size to given width and height\nexport function size(width, height) {\n const p = proportionalSize(this, width, height)\n return this.attr('points', this.array().size(p.width, p.height))\n}\n","import {\n extend,\n nodeOrNew,\n register,\n wrapWithAttrCheck\n} from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport PointArray from '../types/PointArray.js'\nimport Shape from './Shape.js'\nimport * as pointed from '../modules/core/pointed.js'\nimport * as poly from '../modules/core/poly.js'\n\nexport default class Polygon extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('polygon', node), attrs)\n }\n}\n\nregisterMethods({\n Container: {\n // Create a wrapped polygon element\n polygon: wrapWithAttrCheck(function (p) {\n // make sure plot is called as a setter\n return this.put(new Polygon()).plot(p || new PointArray())\n })\n }\n})\n\nextend(Polygon, pointed)\nextend(Polygon, poly)\nregister(Polygon, 'Polygon')\n","import {\n extend,\n nodeOrNew,\n register,\n wrapWithAttrCheck\n} from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport PointArray from '../types/PointArray.js'\nimport Shape from './Shape.js'\nimport * as pointed from '../modules/core/pointed.js'\nimport * as poly from '../modules/core/poly.js'\n\nexport default class Polyline extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('polyline', node), attrs)\n }\n}\n\nregisterMethods({\n Container: {\n // Create a wrapped polygon element\n polyline: wrapWithAttrCheck(function (p) {\n // make sure plot is called as a setter\n return this.put(new Polyline()).plot(p || new PointArray())\n })\n }\n})\n\nextend(Polyline, pointed)\nextend(Polyline, poly)\nregister(Polyline, 'Polyline')\n","import {\n extend,\n nodeOrNew,\n register,\n wrapWithAttrCheck\n} from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport { rx, ry } from '../modules/core/circled.js'\nimport Shape from './Shape.js'\n\nexport default class Rect extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('rect', node), attrs)\n }\n}\n\nextend(Rect, { rx, ry })\n\nregisterMethods({\n Container: {\n // Create a rect element\n rect: wrapWithAttrCheck(function (width, height) {\n return this.put(new Rect()).size(width, height)\n })\n }\n})\n\nregister(Rect, 'Rect')\n","export default class Queue {\n constructor() {\n this._first = null\n this._last = null\n }\n\n // Shows us the first item in the list\n first() {\n return this._first && this._first.value\n }\n\n // Shows us the last item in the list\n last() {\n return this._last && this._last.value\n }\n\n push(value) {\n // An item stores an id and the provided value\n const item =\n typeof value.next !== 'undefined'\n ? value\n : { value: value, next: null, prev: null }\n\n // Deal with the queue being empty or populated\n if (this._last) {\n item.prev = this._last\n this._last.next = item\n this._last = item\n } else {\n this._last = item\n this._first = item\n }\n\n // Return the current item\n return item\n }\n\n // Removes the item that was returned from the push\n remove(item) {\n // Relink the previous item\n if (item.prev) item.prev.next = item.next\n if (item.next) item.next.prev = item.prev\n if (item === this._last) this._last = item.prev\n if (item === this._first) this._first = item.next\n\n // Invalidate item\n item.prev = null\n item.next = null\n }\n\n shift() {\n // Check if we have a value\n const remove = this._first\n if (!remove) return null\n\n // If we do, remove it and relink things\n this._first = remove.next\n if (this._first) this._first.prev = null\n this._last = this._first ? this._last : null\n return remove.value\n }\n}\n","import { globals } from '../utils/window.js'\nimport Queue from './Queue.js'\n\nconst Animator = {\n nextDraw: null,\n frames: new Queue(),\n timeouts: new Queue(),\n immediates: new Queue(),\n timer: () => globals.window.performance || globals.window.Date,\n transforms: [],\n\n frame(fn) {\n // Store the node\n const node = Animator.frames.push({ run: fn })\n\n // Request an animation frame if we don't have one\n if (Animator.nextDraw === null) {\n Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw)\n }\n\n // Return the node so we can remove it easily\n return node\n },\n\n timeout(fn, delay) {\n delay = delay || 0\n\n // Work out when the event should fire\n const time = Animator.timer().now() + delay\n\n // Add the timeout to the end of the queue\n const node = Animator.timeouts.push({ run: fn, time: time })\n\n // Request another animation frame if we need one\n if (Animator.nextDraw === null) {\n Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw)\n }\n\n return node\n },\n\n immediate(fn) {\n // Add the immediate fn to the end of the queue\n const node = Animator.immediates.push(fn)\n // Request another animation frame if we need one\n if (Animator.nextDraw === null) {\n Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw)\n }\n\n return node\n },\n\n cancelFrame(node) {\n node != null && Animator.frames.remove(node)\n },\n\n clearTimeout(node) {\n node != null && Animator.timeouts.remove(node)\n },\n\n cancelImmediate(node) {\n node != null && Animator.immediates.remove(node)\n },\n\n _draw(now) {\n // Run all the timeouts we can run, if they are not ready yet, add them\n // to the end of the queue immediately! (bad timeouts!!! [sarcasm])\n let nextTimeout = null\n const lastTimeout = Animator.timeouts.last()\n while ((nextTimeout = Animator.timeouts.shift())) {\n // Run the timeout if its time, or push it to the end\n if (now >= nextTimeout.time) {\n nextTimeout.run()\n } else {\n Animator.timeouts.push(nextTimeout)\n }\n\n // If we hit the last item, we should stop shifting out more items\n if (nextTimeout === lastTimeout) break\n }\n\n // Run all of the animation frames\n let nextFrame = null\n const lastFrame = Animator.frames.last()\n while (nextFrame !== lastFrame && (nextFrame = Animator.frames.shift())) {\n nextFrame.run(now)\n }\n\n let nextImmediate = null\n while ((nextImmediate = Animator.immediates.shift())) {\n nextImmediate()\n }\n\n // If we have remaining timeouts or frames, draw until we don't anymore\n Animator.nextDraw =\n Animator.timeouts.first() || Animator.frames.first()\n ? globals.window.requestAnimationFrame(Animator._draw)\n : null\n }\n}\n\nexport default Animator\n","import { globals } from '../utils/window.js'\nimport { registerMethods } from '../utils/methods.js'\nimport Animator from './Animator.js'\nimport EventTarget from '../types/EventTarget.js'\n\nconst makeSchedule = function (runnerInfo) {\n const start = runnerInfo.start\n const duration = runnerInfo.runner.duration()\n const end = start + duration\n return {\n start: start,\n duration: duration,\n end: end,\n runner: runnerInfo.runner\n }\n}\n\nconst defaultSource = function () {\n const w = globals.window\n return (w.performance || w.Date).now()\n}\n\nexport default class Timeline extends EventTarget {\n // Construct a new timeline on the given element\n constructor(timeSource = defaultSource) {\n super()\n\n this._timeSource = timeSource\n\n // terminate resets all variables to their initial state\n this.terminate()\n }\n\n active() {\n return !!this._nextFrame\n }\n\n finish() {\n // Go to end and pause\n this.time(this.getEndTimeOfTimeline() + 1)\n return this.pause()\n }\n\n // Calculates the end of the timeline\n getEndTime() {\n const lastRunnerInfo = this.getLastRunnerInfo()\n const lastDuration = lastRunnerInfo ? lastRunnerInfo.runner.duration() : 0\n const lastStartTime = lastRunnerInfo ? lastRunnerInfo.start : this._time\n return lastStartTime + lastDuration\n }\n\n getEndTimeOfTimeline() {\n const endTimes = this._runners.map((i) => i.start + i.runner.duration())\n return Math.max(0, ...endTimes)\n }\n\n getLastRunnerInfo() {\n return this.getRunnerInfoById(this._lastRunnerId)\n }\n\n getRunnerInfoById(id) {\n return this._runners[this._runnerIds.indexOf(id)] || null\n }\n\n pause() {\n this._paused = true\n return this._continue()\n }\n\n persist(dtOrForever) {\n if (dtOrForever == null) return this._persist\n this._persist = dtOrForever\n return this\n }\n\n play() {\n // Now make sure we are not paused and continue the animation\n this._paused = false\n return this.updateTime()._continue()\n }\n\n reverse(yes) {\n const currentSpeed = this.speed()\n if (yes == null) return this.speed(-currentSpeed)\n\n const positive = Math.abs(currentSpeed)\n return this.speed(yes ? -positive : positive)\n }\n\n // schedules a runner on the timeline\n schedule(runner, delay, when) {\n if (runner == null) {\n return this._runners.map(makeSchedule)\n }\n\n // The start time for the next animation can either be given explicitly,\n // derived from the current timeline time or it can be relative to the\n // last start time to chain animations directly\n\n let absoluteStartTime = 0\n const endTime = this.getEndTime()\n delay = delay || 0\n\n // Work out when to start the animation\n if (when == null || when === 'last' || when === 'after') {\n // Take the last time and increment\n absoluteStartTime = endTime\n } else if (when === 'absolute' || when === 'start') {\n absoluteStartTime = delay\n delay = 0\n } else if (when === 'now') {\n absoluteStartTime = this._time\n } else if (when === 'relative') {\n const runnerInfo = this.getRunnerInfoById(runner.id)\n if (runnerInfo) {\n absoluteStartTime = runnerInfo.start + delay\n delay = 0\n }\n } else if (when === 'with-last') {\n const lastRunnerInfo = this.getLastRunnerInfo()\n const lastStartTime = lastRunnerInfo ? lastRunnerInfo.start : this._time\n absoluteStartTime = lastStartTime\n } else {\n throw new Error('Invalid value for the \"when\" parameter')\n }\n\n // Manage runner\n runner.unschedule()\n runner.timeline(this)\n\n const persist = runner.persist()\n const runnerInfo = {\n persist: persist === null ? this._persist : persist,\n start: absoluteStartTime + delay,\n runner\n }\n\n this._lastRunnerId = runner.id\n\n this._runners.push(runnerInfo)\n this._runners.sort((a, b) => a.start - b.start)\n this._runnerIds = this._runners.map((info) => info.runner.id)\n\n this.updateTime()._continue()\n return this\n }\n\n seek(dt) {\n return this.time(this._time + dt)\n }\n\n source(fn) {\n if (fn == null) return this._timeSource\n this._timeSource = fn\n return this\n }\n\n speed(speed) {\n if (speed == null) return this._speed\n this._speed = speed\n return this\n }\n\n stop() {\n // Go to start and pause\n this.time(0)\n return this.pause()\n }\n\n time(time) {\n if (time == null) return this._time\n this._time = time\n return this._continue(true)\n }\n\n // Remove the runner from this timeline\n unschedule(runner) {\n const index = this._runnerIds.indexOf(runner.id)\n if (index < 0) return this\n\n this._runners.splice(index, 1)\n this._runnerIds.splice(index, 1)\n\n runner.timeline(null)\n return this\n }\n\n // Makes sure, that after pausing the time doesn't jump\n updateTime() {\n if (!this.active()) {\n this._lastSourceTime = this._timeSource()\n }\n return this\n }\n\n // Checks if we are running and continues the animation\n _continue(immediateStep = false) {\n Animator.cancelFrame(this._nextFrame)\n this._nextFrame = null\n\n if (immediateStep) return this._stepImmediate()\n if (this._paused) return this\n\n this._nextFrame = Animator.frame(this._step)\n return this\n }\n\n _stepFn(immediateStep = false) {\n // Get the time delta from the last time and update the time\n const time = this._timeSource()\n let dtSource = time - this._lastSourceTime\n\n if (immediateStep) dtSource = 0\n\n const dtTime = this._speed * dtSource + (this._time - this._lastStepTime)\n this._lastSourceTime = time\n\n // Only update the time if we use the timeSource.\n // Otherwise use the current time\n if (!immediateStep) {\n // Update the time\n this._time += dtTime\n this._time = this._time < 0 ? 0 : this._time\n }\n this._lastStepTime = this._time\n this.fire('time', this._time)\n\n // This is for the case that the timeline was seeked so that the time\n // is now before the startTime of the runner. That is why we need to set\n // the runner to position 0\n\n // FIXME:\n // However, resetting in insertion order leads to bugs. Considering the case,\n // where 2 runners change the same attribute but in different times,\n // resetting both of them will lead to the case where the later defined\n // runner always wins the reset even if the other runner started earlier\n // and therefore should win the attribute battle\n // this can be solved by resetting them backwards\n for (let k = this._runners.length; k--; ) {\n // Get and run the current runner and ignore it if its inactive\n const runnerInfo = this._runners[k]\n const runner = runnerInfo.runner\n\n // Make sure that we give the actual difference\n // between runner start time and now\n const dtToStart = this._time - runnerInfo.start\n\n // Dont run runner if not started yet\n // and try to reset it\n if (dtToStart <= 0) {\n runner.reset()\n }\n }\n\n // Run all of the runners directly\n let runnersLeft = false\n for (let i = 0, len = this._runners.length; i < len; i++) {\n // Get and run the current runner and ignore it if its inactive\n const runnerInfo = this._runners[i]\n const runner = runnerInfo.runner\n let dt = dtTime\n\n // Make sure that we give the actual difference\n // between runner start time and now\n const dtToStart = this._time - runnerInfo.start\n\n // Dont run runner if not started yet\n if (dtToStart <= 0) {\n runnersLeft = true\n continue\n } else if (dtToStart < dt) {\n // Adjust dt to make sure that animation is on point\n dt = dtToStart\n }\n\n if (!runner.active()) continue\n\n // If this runner is still going, signal that we need another animation\n // frame, otherwise, remove the completed runner\n const finished = runner.step(dt).done\n if (!finished) {\n runnersLeft = true\n // continue\n } else if (runnerInfo.persist !== true) {\n // runner is finished. And runner might get removed\n const endTime = runner.duration() - runner.time() + this._time\n\n if (endTime + runnerInfo.persist < this._time) {\n // Delete runner and correct index\n runner.unschedule()\n --i\n --len\n }\n }\n }\n\n // Basically: we continue when there are runners right from us in time\n // when -->, and when runners are left from us when <--\n if (\n (runnersLeft && !(this._speed < 0 && this._time === 0)) ||\n (this._runnerIds.length && this._speed < 0 && this._time > 0)\n ) {\n this._continue()\n } else {\n this.pause()\n this.fire('finished')\n }\n\n return this\n }\n\n terminate() {\n // cleanup memory\n\n // Store the timing variables\n this._startTime = 0\n this._speed = 1.0\n\n // Determines how long a runner is hold in memory. Can be a dt or true/false\n this._persist = 0\n\n // Keep track of the running animations and their starting parameters\n this._nextFrame = null\n this._paused = true\n this._runners = []\n this._runnerIds = []\n this._lastRunnerId = -1\n this._time = 0\n this._lastSourceTime = 0\n this._lastStepTime = 0\n\n // Make sure that step is always called in class context\n this._step = this._stepFn.bind(this, false)\n this._stepImmediate = this._stepFn.bind(this, true)\n }\n}\n\nregisterMethods({\n Element: {\n timeline: function (timeline) {\n if (timeline == null) {\n this._timeline = this._timeline || new Timeline()\n return this._timeline\n } else {\n this._timeline = timeline\n return this\n }\n }\n }\n})\n","import { Controller, Ease, Stepper } from './Controller.js'\nimport { extend, register } from '../utils/adopter.js'\nimport { from, to } from '../modules/core/gradiented.js'\nimport { getOrigin } from '../utils/utils.js'\nimport { noop, timeline } from '../modules/core/defaults.js'\nimport { registerMethods } from '../utils/methods.js'\nimport { rx, ry } from '../modules/core/circled.js'\nimport Animator from './Animator.js'\nimport Box from '../types/Box.js'\nimport EventTarget from '../types/EventTarget.js'\nimport Matrix from '../types/Matrix.js'\nimport Morphable, { TransformBag, ObjectBag } from './Morphable.js'\nimport Point from '../types/Point.js'\nimport SVGNumber from '../types/SVGNumber.js'\nimport Timeline from './Timeline.js'\n\nexport default class Runner extends EventTarget {\n constructor(options) {\n super()\n\n // Store a unique id on the runner, so that we can identify it later\n this.id = Runner.id++\n\n // Ensure a default value\n options = options == null ? timeline.duration : options\n\n // Ensure that we get a controller\n options = typeof options === 'function' ? new Controller(options) : options\n\n // Declare all of the variables\n this._element = null\n this._timeline = null\n this.done = false\n this._queue = []\n\n // Work out the stepper and the duration\n this._duration = typeof options === 'number' && options\n this._isDeclarative = options instanceof Controller\n this._stepper = this._isDeclarative ? options : new Ease()\n\n // We copy the current values from the timeline because they can change\n this._history = {}\n\n // Store the state of the runner\n this.enabled = true\n this._time = 0\n this._lastTime = 0\n\n // At creation, the runner is in reset state\n this._reseted = true\n\n // Save transforms applied to this runner\n this.transforms = new Matrix()\n this.transformId = 1\n\n // Looping variables\n this._haveReversed = false\n this._reverse = false\n this._loopsDone = 0\n this._swing = false\n this._wait = 0\n this._times = 1\n\n this._frameId = null\n\n // Stores how long a runner is stored after being done\n this._persist = this._isDeclarative ? true : null\n }\n\n static sanitise(duration, delay, when) {\n // Initialise the default parameters\n let times = 1\n let swing = false\n let wait = 0\n duration = duration ?? timeline.duration\n delay = delay ?? timeline.delay\n when = when || 'last'\n\n // If we have an object, unpack the values\n if (typeof duration === 'object' && !(duration instanceof Stepper)) {\n delay = duration.delay ?? delay\n when = duration.when ?? when\n swing = duration.swing || swing\n times = duration.times ?? times\n wait = duration.wait ?? wait\n duration = duration.duration ?? timeline.duration\n }\n\n return {\n duration: duration,\n delay: delay,\n swing: swing,\n times: times,\n wait: wait,\n when: when\n }\n }\n\n active(enabled) {\n if (enabled == null) return this.enabled\n this.enabled = enabled\n return this\n }\n\n /*\n Private Methods\n ===============\n Methods that shouldn't be used externally\n */\n addTransform(transform) {\n this.transforms.lmultiplyO(transform)\n return this\n }\n\n after(fn) {\n return this.on('finished', fn)\n }\n\n animate(duration, delay, when) {\n const o = Runner.sanitise(duration, delay, when)\n const runner = new Runner(o.duration)\n if (this._timeline) runner.timeline(this._timeline)\n if (this._element) runner.element(this._element)\n return runner.loop(o).schedule(o.delay, o.when)\n }\n\n clearTransform() {\n this.transforms = new Matrix()\n return this\n }\n\n // TODO: Keep track of all transformations so that deletion is faster\n clearTransformsFromQueue() {\n if (\n !this.done ||\n !this._timeline ||\n !this._timeline._runnerIds.includes(this.id)\n ) {\n this._queue = this._queue.filter((item) => {\n return !item.isTransform\n })\n }\n }\n\n delay(delay) {\n return this.animate(0, delay)\n }\n\n duration() {\n return this._times * (this._wait + this._duration) - this._wait\n }\n\n during(fn) {\n return this.queue(null, fn)\n }\n\n ease(fn) {\n this._stepper = new Ease(fn)\n return this\n }\n /*\n Runner Definitions\n ==================\n These methods help us define the runtime behaviour of the Runner or they\n help us make new runners from the current runner\n */\n\n element(element) {\n if (element == null) return this._element\n this._element = element\n element._prepareRunner()\n return this\n }\n\n finish() {\n return this.step(Infinity)\n }\n\n loop(times, swing, wait) {\n // Deal with the user passing in an object\n if (typeof times === 'object') {\n swing = times.swing\n wait = times.wait\n times = times.times\n }\n\n // Sanitise the values and store them\n this._times = times || Infinity\n this._swing = swing || false\n this._wait = wait || 0\n\n // Allow true to be passed\n if (this._times === true) {\n this._times = Infinity\n }\n\n return this\n }\n\n loops(p) {\n const loopDuration = this._duration + this._wait\n if (p == null) {\n const loopsDone = Math.floor(this._time / loopDuration)\n const relativeTime = this._time - loopsDone * loopDuration\n const position = relativeTime / this._duration\n return Math.min(loopsDone + position, this._times)\n }\n const whole = Math.floor(p)\n const partial = p % 1\n const time = loopDuration * whole + this._duration * partial\n return this.time(time)\n }\n\n persist(dtOrForever) {\n if (dtOrForever == null) return this._persist\n this._persist = dtOrForever\n return this\n }\n\n position(p) {\n // Get all of the variables we need\n const x = this._time\n const d = this._duration\n const w = this._wait\n const t = this._times\n const s = this._swing\n const r = this._reverse\n let position\n\n if (p == null) {\n /*\n This function converts a time to a position in the range [0, 1]\n The full explanation can be found in this desmos demonstration\n https://www.desmos.com/calculator/u4fbavgche\n The logic is slightly simplified here because we can use booleans\n */\n\n // Figure out the value without thinking about the start or end time\n const f = function (x) {\n const swinging = s * Math.floor((x % (2 * (w + d))) / (w + d))\n const backwards = (swinging && !r) || (!swinging && r)\n const uncliped =\n (Math.pow(-1, backwards) * (x % (w + d))) / d + backwards\n const clipped = Math.max(Math.min(uncliped, 1), 0)\n return clipped\n }\n\n // Figure out the value by incorporating the start time\n const endTime = t * (w + d) - w\n position =\n x <= 0\n ? Math.round(f(1e-5))\n : x < endTime\n ? f(x)\n : Math.round(f(endTime - 1e-5))\n return position\n }\n\n // Work out the loops done and add the position to the loops done\n const loopsDone = Math.floor(this.loops())\n const swingForward = s && loopsDone % 2 === 0\n const forwards = (swingForward && !r) || (r && swingForward)\n position = loopsDone + (forwards ? p : 1 - p)\n return this.loops(position)\n }\n\n progress(p) {\n if (p == null) {\n return Math.min(1, this._time / this.duration())\n }\n return this.time(p * this.duration())\n }\n\n /*\n Basic Functionality\n ===================\n These methods allow us to attach basic functions to the runner directly\n */\n queue(initFn, runFn, retargetFn, isTransform) {\n this._queue.push({\n initialiser: initFn || noop,\n runner: runFn || noop,\n retarget: retargetFn,\n isTransform: isTransform,\n initialised: false,\n finished: false\n })\n const timeline = this.timeline()\n timeline && this.timeline()._continue()\n return this\n }\n\n reset() {\n if (this._reseted) return this\n this.time(0)\n this._reseted = true\n return this\n }\n\n reverse(reverse) {\n this._reverse = reverse == null ? !this._reverse : reverse\n return this\n }\n\n schedule(timeline, delay, when) {\n // The user doesn't need to pass a timeline if we already have one\n if (!(timeline instanceof Timeline)) {\n when = delay\n delay = timeline\n timeline = this.timeline()\n }\n\n // If there is no timeline, yell at the user...\n if (!timeline) {\n throw Error('Runner cannot be scheduled without timeline')\n }\n\n // Schedule the runner on the timeline provided\n timeline.schedule(this, delay, when)\n return this\n }\n\n step(dt) {\n // If we are inactive, this stepper just gets skipped\n if (!this.enabled) return this\n\n // Update the time and get the new position\n dt = dt == null ? 16 : dt\n this._time += dt\n const position = this.position()\n\n // Figure out if we need to run the stepper in this frame\n const running = this._lastPosition !== position && this._time >= 0\n this._lastPosition = position\n\n // Figure out if we just started\n const duration = this.duration()\n const justStarted = this._lastTime <= 0 && this._time > 0\n const justFinished = this._lastTime < duration && this._time >= duration\n\n this._lastTime = this._time\n if (justStarted) {\n this.fire('start', this)\n }\n\n // Work out if the runner is finished set the done flag here so animations\n // know, that they are running in the last step (this is good for\n // transformations which can be merged)\n const declarative = this._isDeclarative\n this.done = !declarative && !justFinished && this._time >= duration\n\n // Runner is running. So its not in reset state anymore\n this._reseted = false\n\n let converged = false\n // Call initialise and the run function\n if (running || declarative) {\n this._initialise(running)\n\n // clear the transforms on this runner so they dont get added again and again\n this.transforms = new Matrix()\n converged = this._run(declarative ? dt : position)\n\n this.fire('step', this)\n }\n // correct the done flag here\n // declarative animations itself know when they converged\n this.done = this.done || (converged && declarative)\n if (justFinished) {\n this.fire('finished', this)\n }\n return this\n }\n\n /*\n Runner animation methods\n ========================\n Control how the animation plays\n */\n time(time) {\n if (time == null) {\n return this._time\n }\n const dt = time - this._time\n this.step(dt)\n return this\n }\n\n timeline(timeline) {\n // check explicitly for undefined so we can set the timeline to null\n if (typeof timeline === 'undefined') return this._timeline\n this._timeline = timeline\n return this\n }\n\n unschedule() {\n const timeline = this.timeline()\n timeline && timeline.unschedule(this)\n return this\n }\n\n // Run each initialise function in the runner if required\n _initialise(running) {\n // If we aren't running, we shouldn't initialise when not declarative\n if (!running && !this._isDeclarative) return\n\n // Loop through all of the initialisers\n for (let i = 0, len = this._queue.length; i < len; ++i) {\n // Get the current initialiser\n const current = this._queue[i]\n\n // Determine whether we need to initialise\n const needsIt = this._isDeclarative || (!current.initialised && running)\n running = !current.finished\n\n // Call the initialiser if we need to\n if (needsIt && running) {\n current.initialiser.call(this)\n current.initialised = true\n }\n }\n }\n\n // Save a morpher to the morpher list so that we can retarget it later\n _rememberMorpher(method, morpher) {\n this._history[method] = {\n morpher: morpher,\n caller: this._queue[this._queue.length - 1]\n }\n\n // We have to resume the timeline in case a controller\n // is already done without being ever run\n // This can happen when e.g. this is done:\n // anim = el.animate(new SVG.Spring)\n // and later\n // anim.move(...)\n if (this._isDeclarative) {\n const timeline = this.timeline()\n timeline && timeline.play()\n }\n }\n\n // Try to set the target for a morpher if the morpher exists, otherwise\n // Run each run function for the position or dt given\n _run(positionOrDt) {\n // Run all of the _queue directly\n let allfinished = true\n for (let i = 0, len = this._queue.length; i < len; ++i) {\n // Get the current function to run\n const current = this._queue[i]\n\n // Run the function if its not finished, we keep track of the finished\n // flag for the sake of declarative _queue\n const converged = current.runner.call(this, positionOrDt)\n current.finished = current.finished || converged === true\n allfinished = allfinished && current.finished\n }\n\n // We report when all of the constructors are finished\n return allfinished\n }\n\n // do nothing and return false\n _tryRetarget(method, target, extra) {\n if (this._history[method]) {\n // if the last method wasn't even initialised, throw it away\n if (!this._history[method].caller.initialised) {\n const index = this._queue.indexOf(this._history[method].caller)\n this._queue.splice(index, 1)\n return false\n }\n\n // for the case of transformations, we use the special retarget function\n // which has access to the outer scope\n if (this._history[method].caller.retarget) {\n this._history[method].caller.retarget.call(this, target, extra)\n // for everything else a simple morpher change is sufficient\n } else {\n this._history[method].morpher.to(target)\n }\n\n this._history[method].caller.finished = false\n const timeline = this.timeline()\n timeline && timeline.play()\n return true\n }\n return false\n }\n}\n\nRunner.id = 0\n\nexport class FakeRunner {\n constructor(transforms = new Matrix(), id = -1, done = true) {\n this.transforms = transforms\n this.id = id\n this.done = done\n }\n\n clearTransformsFromQueue() {}\n}\n\nextend([Runner, FakeRunner], {\n mergeWith(runner) {\n return new FakeRunner(\n runner.transforms.lmultiply(this.transforms),\n runner.id\n )\n }\n})\n\n// FakeRunner.emptyRunner = new FakeRunner()\n\nconst lmultiply = (last, curr) => last.lmultiplyO(curr)\nconst getRunnerTransform = (runner) => runner.transforms\n\nfunction mergeTransforms() {\n // Find the matrix to apply to the element and apply it\n const runners = this._transformationRunners.runners\n const netTransform = runners\n .map(getRunnerTransform)\n .reduce(lmultiply, new Matrix())\n\n this.transform(netTransform)\n\n this._transformationRunners.merge()\n\n if (this._transformationRunners.length() === 1) {\n this._frameId = null\n }\n}\n\nexport class RunnerArray {\n constructor() {\n this.runners = []\n this.ids = []\n }\n\n add(runner) {\n if (this.runners.includes(runner)) return\n const id = runner.id + 1\n\n this.runners.push(runner)\n this.ids.push(id)\n\n return this\n }\n\n clearBefore(id) {\n const deleteCnt = this.ids.indexOf(id + 1) || 1\n this.ids.splice(0, deleteCnt, 0)\n this.runners\n .splice(0, deleteCnt, new FakeRunner())\n .forEach((r) => r.clearTransformsFromQueue())\n return this\n }\n\n edit(id, newRunner) {\n const index = this.ids.indexOf(id + 1)\n this.ids.splice(index, 1, id + 1)\n this.runners.splice(index, 1, newRunner)\n return this\n }\n\n getByID(id) {\n return this.runners[this.ids.indexOf(id + 1)]\n }\n\n length() {\n return this.ids.length\n }\n\n merge() {\n let lastRunner = null\n for (let i = 0; i < this.runners.length; ++i) {\n const runner = this.runners[i]\n\n const condition =\n lastRunner &&\n runner.done &&\n lastRunner.done &&\n // don't merge runner when persisted on timeline\n (!runner._timeline ||\n !runner._timeline._runnerIds.includes(runner.id)) &&\n (!lastRunner._timeline ||\n !lastRunner._timeline._runnerIds.includes(lastRunner.id))\n\n if (condition) {\n // the +1 happens in the function\n this.remove(runner.id)\n const newRunner = runner.mergeWith(lastRunner)\n this.edit(lastRunner.id, newRunner)\n lastRunner = newRunner\n --i\n } else {\n lastRunner = runner\n }\n }\n\n return this\n }\n\n remove(id) {\n const index = this.ids.indexOf(id + 1)\n this.ids.splice(index, 1)\n this.runners.splice(index, 1)\n return this\n }\n}\n\nregisterMethods({\n Element: {\n animate(duration, delay, when) {\n const o = Runner.sanitise(duration, delay, when)\n const timeline = this.timeline()\n return new Runner(o.duration)\n .loop(o)\n .element(this)\n .timeline(timeline.play())\n .schedule(o.delay, o.when)\n },\n\n delay(by, when) {\n return this.animate(0, by, when)\n },\n\n // this function searches for all runners on the element and deletes the ones\n // which run before the current one. This is because absolute transformations\n // overwrite anything anyway so there is no need to waste time computing\n // other runners\n _clearTransformRunnersBefore(currentRunner) {\n this._transformationRunners.clearBefore(currentRunner.id)\n },\n\n _currentTransform(current) {\n return (\n this._transformationRunners.runners\n // we need the equal sign here to make sure, that also transformations\n // on the same runner which execute before the current transformation are\n // taken into account\n .filter((runner) => runner.id <= current.id)\n .map(getRunnerTransform)\n .reduce(lmultiply, new Matrix())\n )\n },\n\n _addRunner(runner) {\n this._transformationRunners.add(runner)\n\n // Make sure that the runner merge is executed at the very end of\n // all Animator functions. That is why we use immediate here to execute\n // the merge right after all frames are run\n Animator.cancelImmediate(this._frameId)\n this._frameId = Animator.immediate(mergeTransforms.bind(this))\n },\n\n _prepareRunner() {\n if (this._frameId == null) {\n this._transformationRunners = new RunnerArray().add(\n new FakeRunner(new Matrix(this))\n )\n }\n }\n }\n})\n\n// Will output the elements from array A that are not in the array B\nconst difference = (a, b) => a.filter((x) => !b.includes(x))\n\nextend(Runner, {\n attr(a, v) {\n return this.styleAttr('attr', a, v)\n },\n\n // Add animatable styles\n css(s, v) {\n return this.styleAttr('css', s, v)\n },\n\n styleAttr(type, nameOrAttrs, val) {\n if (typeof nameOrAttrs === 'string') {\n return this.styleAttr(type, { [nameOrAttrs]: val })\n }\n\n let attrs = nameOrAttrs\n if (this._tryRetarget(type, attrs)) return this\n\n let morpher = new Morphable(this._stepper).to(attrs)\n let keys = Object.keys(attrs)\n\n this.queue(\n function () {\n morpher = morpher.from(this.element()[type](keys))\n },\n function (pos) {\n this.element()[type](morpher.at(pos).valueOf())\n return morpher.done()\n },\n function (newToAttrs) {\n // Check if any new keys were added\n const newKeys = Object.keys(newToAttrs)\n const differences = difference(newKeys, keys)\n\n // If their are new keys, initialize them and add them to morpher\n if (differences.length) {\n // Get the values\n const addedFromAttrs = this.element()[type](differences)\n\n // Get the already initialized values\n const oldFromAttrs = new ObjectBag(morpher.from()).valueOf()\n\n // Merge old and new\n Object.assign(oldFromAttrs, addedFromAttrs)\n morpher.from(oldFromAttrs)\n }\n\n // Get the object from the morpher\n const oldToAttrs = new ObjectBag(morpher.to()).valueOf()\n\n // Merge in new attributes\n Object.assign(oldToAttrs, newToAttrs)\n\n // Change morpher target\n morpher.to(oldToAttrs)\n\n // Make sure that we save the work we did so we don't need it to do again\n keys = newKeys\n attrs = newToAttrs\n }\n )\n\n this._rememberMorpher(type, morpher)\n return this\n },\n\n zoom(level, point) {\n if (this._tryRetarget('zoom', level, point)) return this\n\n let morpher = new Morphable(this._stepper).to(new SVGNumber(level))\n\n this.queue(\n function () {\n morpher = morpher.from(this.element().zoom())\n },\n function (pos) {\n this.element().zoom(morpher.at(pos), point)\n return morpher.done()\n },\n function (newLevel, newPoint) {\n point = newPoint\n morpher.to(newLevel)\n }\n )\n\n this._rememberMorpher('zoom', morpher)\n return this\n },\n\n /**\n ** absolute transformations\n **/\n\n //\n // M v -----|-----(D M v = F v)------|-----> T v\n //\n // 1. define the final state (T) and decompose it (once)\n // t = [tx, ty, the, lam, sy, sx]\n // 2. on every frame: pull the current state of all previous transforms\n // (M - m can change)\n // and then write this as m = [tx0, ty0, the0, lam0, sy0, sx0]\n // 3. Find the interpolated matrix F(pos) = m + pos * (t - m)\n // - Note F(0) = M\n // - Note F(1) = T\n // 4. Now you get the delta matrix as a result: D = F * inv(M)\n\n transform(transforms, relative, affine) {\n // If we have a declarative function, we should retarget it if possible\n relative = transforms.relative || relative\n if (\n this._isDeclarative &&\n !relative &&\n this._tryRetarget('transform', transforms)\n ) {\n return this\n }\n\n // Parse the parameters\n const isMatrix = Matrix.isMatrixLike(transforms)\n affine =\n transforms.affine != null\n ? transforms.affine\n : affine != null\n ? affine\n : !isMatrix\n\n // Create a morpher and set its type\n const morpher = new Morphable(this._stepper).type(\n affine ? TransformBag : Matrix\n )\n\n let origin\n let element\n let current\n let currentAngle\n let startTransform\n\n function setup() {\n // make sure element and origin is defined\n element = element || this.element()\n origin = origin || getOrigin(transforms, element)\n\n startTransform = new Matrix(relative ? undefined : element)\n\n // add the runner to the element so it can merge transformations\n element._addRunner(this)\n\n // Deactivate all transforms that have run so far if we are absolute\n if (!relative) {\n element._clearTransformRunnersBefore(this)\n }\n }\n\n function run(pos) {\n // clear all other transforms before this in case something is saved\n // on this runner. We are absolute. We dont need these!\n if (!relative) this.clearTransform()\n\n const { x, y } = new Point(origin).transform(\n element._currentTransform(this)\n )\n\n let target = new Matrix({ ...transforms, origin: [x, y] })\n let start = this._isDeclarative && current ? current : startTransform\n\n if (affine) {\n target = target.decompose(x, y)\n start = start.decompose(x, y)\n\n // Get the current and target angle as it was set\n const rTarget = target.rotate\n const rCurrent = start.rotate\n\n // Figure out the shortest path to rotate directly\n const possibilities = [rTarget - 360, rTarget, rTarget + 360]\n const distances = possibilities.map((a) => Math.abs(a - rCurrent))\n const shortest = Math.min(...distances)\n const index = distances.indexOf(shortest)\n target.rotate = possibilities[index]\n }\n\n if (relative) {\n // we have to be careful here not to overwrite the rotation\n // with the rotate method of Matrix\n if (!isMatrix) {\n target.rotate = transforms.rotate || 0\n }\n if (this._isDeclarative && currentAngle) {\n start.rotate = currentAngle\n }\n }\n\n morpher.from(start)\n morpher.to(target)\n\n const affineParameters = morpher.at(pos)\n currentAngle = affineParameters.rotate\n current = new Matrix(affineParameters)\n\n this.addTransform(current)\n element._addRunner(this)\n return morpher.done()\n }\n\n function retarget(newTransforms) {\n // only get a new origin if it changed since the last call\n if (\n (newTransforms.origin || 'center').toString() !==\n (transforms.origin || 'center').toString()\n ) {\n origin = getOrigin(newTransforms, element)\n }\n\n // overwrite the old transformations with the new ones\n transforms = { ...newTransforms, origin }\n }\n\n this.queue(setup, run, retarget, true)\n this._isDeclarative && this._rememberMorpher('transform', morpher)\n return this\n },\n\n // Animatable x-axis\n x(x) {\n return this._queueNumber('x', x)\n },\n\n // Animatable y-axis\n y(y) {\n return this._queueNumber('y', y)\n },\n\n ax(x) {\n return this._queueNumber('ax', x)\n },\n\n ay(y) {\n return this._queueNumber('ay', y)\n },\n\n dx(x = 0) {\n return this._queueNumberDelta('x', x)\n },\n\n dy(y = 0) {\n return this._queueNumberDelta('y', y)\n },\n\n dmove(x, y) {\n return this.dx(x).dy(y)\n },\n\n _queueNumberDelta(method, to) {\n to = new SVGNumber(to)\n\n // Try to change the target if we have this method already registered\n if (this._tryRetarget(method, to)) return this\n\n // Make a morpher and queue the animation\n const morpher = new Morphable(this._stepper).to(to)\n let from = null\n this.queue(\n function () {\n from = this.element()[method]()\n morpher.from(from)\n morpher.to(from + to)\n },\n function (pos) {\n this.element()[method](morpher.at(pos))\n return morpher.done()\n },\n function (newTo) {\n morpher.to(from + new SVGNumber(newTo))\n }\n )\n\n // Register the morpher so that if it is changed again, we can retarget it\n this._rememberMorpher(method, morpher)\n return this\n },\n\n _queueObject(method, to) {\n // Try to change the target if we have this method already registered\n if (this._tryRetarget(method, to)) return this\n\n // Make a morpher and queue the animation\n const morpher = new Morphable(this._stepper).to(to)\n this.queue(\n function () {\n morpher.from(this.element()[method]())\n },\n function (pos) {\n this.element()[method](morpher.at(pos))\n return morpher.done()\n }\n )\n\n // Register the morpher so that if it is changed again, we can retarget it\n this._rememberMorpher(method, morpher)\n return this\n },\n\n _queueNumber(method, value) {\n return this._queueObject(method, new SVGNumber(value))\n },\n\n // Animatable center x-axis\n cx(x) {\n return this._queueNumber('cx', x)\n },\n\n // Animatable center y-axis\n cy(y) {\n return this._queueNumber('cy', y)\n },\n\n // Add animatable move\n move(x, y) {\n return this.x(x).y(y)\n },\n\n amove(x, y) {\n return this.ax(x).ay(y)\n },\n\n // Add animatable center\n center(x, y) {\n return this.cx(x).cy(y)\n },\n\n // Add animatable size\n size(width, height) {\n // animate bbox based size for all other elements\n let box\n\n if (!width || !height) {\n box = this._element.bbox()\n }\n\n if (!width) {\n width = (box.width / box.height) * height\n }\n\n if (!height) {\n height = (box.height / box.width) * width\n }\n\n return this.width(width).height(height)\n },\n\n // Add animatable width\n width(width) {\n return this._queueNumber('width', width)\n },\n\n // Add animatable height\n height(height) {\n return this._queueNumber('height', height)\n },\n\n // Add animatable plot\n plot(a, b, c, d) {\n // Lines can be plotted with 4 arguments\n if (arguments.length === 4) {\n return this.plot([a, b, c, d])\n }\n\n if (this._tryRetarget('plot', a)) return this\n\n const morpher = new Morphable(this._stepper)\n .type(this._element.MorphArray)\n .to(a)\n\n this.queue(\n function () {\n morpher.from(this._element.array())\n },\n function (pos) {\n this._element.plot(morpher.at(pos))\n return morpher.done()\n }\n )\n\n this._rememberMorpher('plot', morpher)\n return this\n },\n\n // Add leading method\n leading(value) {\n return this._queueNumber('leading', value)\n },\n\n // Add animatable viewbox\n viewbox(x, y, width, height) {\n return this._queueObject('viewbox', new Box(x, y, width, height))\n },\n\n update(o) {\n if (typeof o !== 'object') {\n return this.update({\n offset: arguments[0],\n color: arguments[1],\n opacity: arguments[2]\n })\n }\n\n if (o.opacity != null) this.attr('stop-opacity', o.opacity)\n if (o.color != null) this.attr('stop-color', o.color)\n if (o.offset != null) this.attr('offset', o.offset)\n\n return this\n }\n})\n\nextend(Runner, { rx, ry, from, to })\nregister(Runner, 'Runner')\n","import {\n adopt,\n nodeOrNew,\n register,\n wrapWithAttrCheck\n} from '../utils/adopter.js'\nimport { svg, xlink, xmlns } from '../modules/core/namespaces.js'\nimport { registerMethods } from '../utils/methods.js'\nimport Container from './Container.js'\nimport Defs from './Defs.js'\nimport { globals } from '../utils/window.js'\n\nexport default class Svg extends Container {\n constructor(node, attrs = node) {\n super(nodeOrNew('svg', node), attrs)\n this.namespace()\n }\n\n // Creates and returns defs element\n defs() {\n if (!this.isRoot()) return this.root().defs()\n\n return adopt(this.node.querySelector('defs')) || this.put(new Defs())\n }\n\n isRoot() {\n return (\n !this.node.parentNode ||\n (!(this.node.parentNode instanceof globals.window.SVGElement) &&\n this.node.parentNode.nodeName !== '#document-fragment')\n )\n }\n\n // Add namespaces\n namespace() {\n if (!this.isRoot()) return this.root().namespace()\n return this.attr({ xmlns: svg, version: '1.1' }).attr(\n 'xmlns:xlink',\n xlink,\n xmlns\n )\n }\n\n removeNamespace() {\n return this.attr({ xmlns: null, version: null })\n .attr('xmlns:xlink', null, xmlns)\n .attr('xmlns:svgjs', null, xmlns)\n }\n\n // Check if this is a root svg\n // If not, call root() from this element\n root() {\n if (this.isRoot()) return this\n return super.root()\n }\n}\n\nregisterMethods({\n Container: {\n // Create nested svg document\n nested: wrapWithAttrCheck(function () {\n return this.put(new Svg())\n })\n }\n})\n\nregister(Svg, 'Svg', true)\n","import { nodeOrNew, register, wrapWithAttrCheck } from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport Container from './Container.js'\n\nexport default class Symbol extends Container {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('symbol', node), attrs)\n }\n}\n\nregisterMethods({\n Container: {\n symbol: wrapWithAttrCheck(function () {\n return this.put(new Symbol())\n })\n }\n})\n\nregister(Symbol, 'Symbol')\n","import { globals } from '../../utils/window.js'\n\n// Create plain text node\nexport function plain(text) {\n // clear if build mode is disabled\n if (this._build === false) {\n this.clear()\n }\n\n // create text node\n this.node.appendChild(globals.document.createTextNode(text))\n\n return this\n}\n\n// Get length of text element\nexport function length() {\n return this.node.getComputedTextLength()\n}\n\n// Move over x-axis\n// Text is moved by its bounding box\n// text-anchor does NOT matter\nexport function x(x, box = this.bbox()) {\n if (x == null) {\n return box.x\n }\n\n return this.attr('x', this.attr('x') + x - box.x)\n}\n\n// Move over y-axis\nexport function y(y, box = this.bbox()) {\n if (y == null) {\n return box.y\n }\n\n return this.attr('y', this.attr('y') + y - box.y)\n}\n\nexport function move(x, y, box = this.bbox()) {\n return this.x(x, box).y(y, box)\n}\n\n// Move center over x-axis\nexport function cx(x, box = this.bbox()) {\n if (x == null) {\n return box.cx\n }\n\n return this.attr('x', this.attr('x') + x - box.cx)\n}\n\n// Move center over y-axis\nexport function cy(y, box = this.bbox()) {\n if (y == null) {\n return box.cy\n }\n\n return this.attr('y', this.attr('y') + y - box.cy)\n}\n\nexport function center(x, y, box = this.bbox()) {\n return this.cx(x, box).cy(y, box)\n}\n\nexport function ax(x) {\n return this.attr('x', x)\n}\n\nexport function ay(y) {\n return this.attr('y', y)\n}\n\nexport function amove(x, y) {\n return this.ax(x).ay(y)\n}\n\n// Enable / disable build mode\nexport function build(build) {\n this._build = !!build\n return this\n}\n","import {\n adopt,\n extend,\n nodeOrNew,\n register,\n wrapWithAttrCheck\n} from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport SVGNumber from '../types/SVGNumber.js'\nimport Shape from './Shape.js'\nimport { globals } from '../utils/window.js'\nimport * as textable from '../modules/core/textable.js'\nimport { isDescriptive, writeDataToDom } from '../utils/utils.js'\n\nexport default class Text extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('text', node), attrs)\n\n this.dom.leading = this.dom.leading ?? new SVGNumber(1.3) // store leading value for rebuilding\n this._rebuild = true // enable automatic updating of dy values\n this._build = false // disable build mode for adding multiple lines\n }\n\n // Set / get leading\n leading(value) {\n // act as getter\n if (value == null) {\n return this.dom.leading\n }\n\n // act as setter\n this.dom.leading = new SVGNumber(value)\n\n return this.rebuild()\n }\n\n // Rebuild appearance type\n rebuild(rebuild) {\n // store new rebuild flag if given\n if (typeof rebuild === 'boolean') {\n this._rebuild = rebuild\n }\n\n // define position of all lines\n if (this._rebuild) {\n const self = this\n let blankLineOffset = 0\n const leading = this.dom.leading\n\n this.each(function (i) {\n if (isDescriptive(this.node)) return\n\n const fontSize = globals.window\n .getComputedStyle(this.node)\n .getPropertyValue('font-size')\n\n const dy = leading * new SVGNumber(fontSize)\n\n if (this.dom.newLined) {\n this.attr('x', self.attr('x'))\n\n if (this.text() === '\\n') {\n blankLineOffset += dy\n } else {\n this.attr('dy', i ? dy + blankLineOffset : 0)\n blankLineOffset = 0\n }\n }\n })\n\n this.fire('rebuild')\n }\n\n return this\n }\n\n // overwrite method from parent to set data properly\n setData(o) {\n this.dom = o\n this.dom.leading = new SVGNumber(o.leading || 1.3)\n return this\n }\n\n writeDataToDom() {\n writeDataToDom(this, this.dom, { leading: 1.3 })\n return this\n }\n\n // Set the text content\n text(text) {\n // act as getter\n if (text === undefined) {\n const children = this.node.childNodes\n let firstLine = 0\n text = ''\n\n for (let i = 0, len = children.length; i < len; ++i) {\n // skip textPaths - they are no lines\n if (children[i].nodeName === 'textPath' || isDescriptive(children[i])) {\n if (i === 0) firstLine = i + 1\n continue\n }\n\n // add newline if its not the first child and newLined is set to true\n if (\n i !== firstLine &&\n children[i].nodeType !== 3 &&\n adopt(children[i]).dom.newLined === true\n ) {\n text += '\\n'\n }\n\n // add content of this node\n text += children[i].textContent\n }\n\n return text\n }\n\n // remove existing content\n this.clear().build(true)\n\n if (typeof text === 'function') {\n // call block\n text.call(this, this)\n } else {\n // store text and make sure text is not blank\n text = (text + '').split('\\n')\n\n // build new lines\n for (let j = 0, jl = text.length; j < jl; j++) {\n this.newLine(text[j])\n }\n }\n\n // disable build mode and rebuild lines\n return this.build(false).rebuild()\n }\n}\n\nextend(Text, textable)\n\nregisterMethods({\n Container: {\n // Create text element\n text: wrapWithAttrCheck(function (text = '') {\n return this.put(new Text()).text(text)\n }),\n\n // Create plain text element\n plain: wrapWithAttrCheck(function (text = '') {\n return this.put(new Text()).plain(text)\n })\n }\n})\n\nregister(Text, 'Text')\n","import {\n extend,\n nodeOrNew,\n register,\n wrapWithAttrCheck\n} from '../utils/adopter.js'\nimport { globals } from '../utils/window.js'\nimport { registerMethods } from '../utils/methods.js'\nimport SVGNumber from '../types/SVGNumber.js'\nimport Shape from './Shape.js'\nimport Text from './Text.js'\nimport * as textable from '../modules/core/textable.js'\n\nexport default class Tspan extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('tspan', node), attrs)\n this._build = false // disable build mode for adding multiple lines\n }\n\n // Shortcut dx\n dx(dx) {\n return this.attr('dx', dx)\n }\n\n // Shortcut dy\n dy(dy) {\n return this.attr('dy', dy)\n }\n\n // Create new line\n newLine() {\n // mark new line\n this.dom.newLined = true\n\n // fetch parent\n const text = this.parent()\n\n // early return in case we are not in a text element\n if (!(text instanceof Text)) {\n return this\n }\n\n const i = text.index(this)\n\n const fontSize = globals.window\n .getComputedStyle(this.node)\n .getPropertyValue('font-size')\n const dy = text.dom.leading * new SVGNumber(fontSize)\n\n // apply new position\n return this.dy(i ? dy : 0).attr('x', text.x())\n }\n\n // Set text content\n text(text) {\n if (text == null)\n return this.node.textContent + (this.dom.newLined ? '\\n' : '')\n\n if (typeof text === 'function') {\n this.clear().build(true)\n text.call(this, this)\n this.build(false)\n } else {\n this.plain(text)\n }\n\n return this\n }\n}\n\nextend(Tspan, textable)\n\nregisterMethods({\n Tspan: {\n tspan: wrapWithAttrCheck(function (text = '') {\n const tspan = new Tspan()\n\n // clear if build mode is disabled\n if (!this._build) {\n this.clear()\n }\n\n // add new tspan\n return this.put(tspan).text(text)\n })\n },\n Text: {\n newLine: function (text = '') {\n return this.tspan(text).newLine()\n }\n }\n})\n\nregister(Tspan, 'Tspan')\n","import { cx, cy, height, width, x, y } from '../modules/core/circled.js'\nimport {\n extend,\n nodeOrNew,\n register,\n wrapWithAttrCheck\n} from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport SVGNumber from '../types/SVGNumber.js'\nimport Shape from './Shape.js'\n\nexport default class Circle extends Shape {\n constructor(node, attrs = node) {\n super(nodeOrNew('circle', node), attrs)\n }\n\n radius(r) {\n return this.attr('r', r)\n }\n\n // Radius x value\n rx(rx) {\n return this.attr('r', rx)\n }\n\n // Alias radius x value\n ry(ry) {\n return this.rx(ry)\n }\n\n size(size) {\n return this.radius(new SVGNumber(size).divide(2))\n }\n}\n\nextend(Circle, { x, y, cx, cy, width, height })\n\nregisterMethods({\n Container: {\n // Create circle element\n circle: wrapWithAttrCheck(function (size = 0) {\n return this.put(new Circle()).size(size).move(0, 0)\n })\n }\n})\n\nregister(Circle, 'Circle')\n","import { nodeOrNew, register, wrapWithAttrCheck } from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport Container from './Container.js'\nimport baseFind from '../modules/core/selector.js'\n\nexport default class ClipPath extends Container {\n constructor(node, attrs = node) {\n super(nodeOrNew('clipPath', node), attrs)\n }\n\n // Unclip all clipped elements and remove itself\n remove() {\n // unclip all targets\n this.targets().forEach(function (el) {\n el.unclip()\n })\n\n // remove clipPath from parent\n return super.remove()\n }\n\n targets() {\n return baseFind('svg [clip-path*=' + this.id() + ']')\n }\n}\n\nregisterMethods({\n Container: {\n // Create clipping element\n clip: wrapWithAttrCheck(function () {\n return this.defs().put(new ClipPath())\n })\n },\n Element: {\n // Distribute clipPath to svg element\n clipper() {\n return this.reference('clip-path')\n },\n\n clipWith(element) {\n // use given clip or create a new one\n const clipper =\n element instanceof ClipPath\n ? element\n : this.parent().clip().add(element)\n\n // apply mask\n return this.attr('clip-path', 'url(#' + clipper.id() + ')')\n },\n\n // Unclip element\n unclip() {\n return this.attr('clip-path', null)\n }\n }\n})\n\nregister(ClipPath, 'ClipPath')\n","import { nodeOrNew, register, wrapWithAttrCheck } from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport Element from './Element.js'\n\nexport default class ForeignObject extends Element {\n constructor(node, attrs = node) {\n super(nodeOrNew('foreignObject', node), attrs)\n }\n}\n\nregisterMethods({\n Container: {\n foreignObject: wrapWithAttrCheck(function (width, height) {\n return this.put(new ForeignObject()).size(width, height)\n })\n }\n})\n\nregister(ForeignObject, 'ForeignObject')\n","import Matrix from '../../types/Matrix.js'\nimport Point from '../../types/Point.js'\nimport Box from '../../types/Box.js'\nimport { proportionalSize } from '../../utils/utils.js'\nimport { getWindow } from '../../utils/window.js'\n\nexport function dmove(dx, dy) {\n this.children().forEach((child) => {\n let bbox\n\n // We have to wrap this for elements that dont have a bbox\n // e.g. title and other descriptive elements\n try {\n // Get the childs bbox\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1905039\n // Because bbox for nested svgs returns the contents bbox in the coordinate space of the svg itself (weird!), we cant use bbox for svgs\n // Therefore we have to use getBoundingClientRect. But THAT is broken (as explained in the bug).\n // Funnily enough the broken behavior would work for us but that breaks it in chrome\n // So we have to replicate the broken behavior of FF by just reading the attributes of the svg itself\n bbox =\n child.node instanceof getWindow().SVGSVGElement\n ? new Box(child.attr(['x', 'y', 'width', 'height']))\n : child.bbox()\n } catch (e) {\n return\n }\n\n // Get childs matrix\n const m = new Matrix(child)\n // Translate childs matrix by amount and\n // transform it back into parents space\n const matrix = m.translate(dx, dy).transform(m.inverse())\n // Calculate new x and y from old box\n const p = new Point(bbox.x, bbox.y).transform(matrix)\n // Move element\n child.move(p.x, p.y)\n })\n\n return this\n}\n\nexport function dx(dx) {\n return this.dmove(dx, 0)\n}\n\nexport function dy(dy) {\n return this.dmove(0, dy)\n}\n\nexport function height(height, box = this.bbox()) {\n if (height == null) return box.height\n return this.size(box.width, height, box)\n}\n\nexport function move(x = 0, y = 0, box = this.bbox()) {\n const dx = x - box.x\n const dy = y - box.y\n\n return this.dmove(dx, dy)\n}\n\nexport function size(width, height, box = this.bbox()) {\n const p = proportionalSize(this, width, height, box)\n const scaleX = p.width / box.width\n const scaleY = p.height / box.height\n\n this.children().forEach((child) => {\n const o = new Point(box).transform(new Matrix(child).inverse())\n child.scale(scaleX, scaleY, o.x, o.y)\n })\n\n return this\n}\n\nexport function width(width, box = this.bbox()) {\n if (width == null) return box.width\n return this.size(width, box.height, box)\n}\n\nexport function x(x, box = this.bbox()) {\n if (x == null) return box.x\n return this.move(x, box.y, box)\n}\n\nexport function y(y, box = this.bbox()) {\n if (y == null) return box.y\n return this.move(box.x, y, box)\n}\n","import {\n nodeOrNew,\n register,\n wrapWithAttrCheck,\n extend\n} from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport Container from './Container.js'\nimport * as containerGeometry from '../modules/core/containerGeometry.js'\n\nexport default class G extends Container {\n constructor(node, attrs = node) {\n super(nodeOrNew('g', node), attrs)\n }\n}\n\nextend(G, containerGeometry)\n\nregisterMethods({\n Container: {\n // Create a group element\n group: wrapWithAttrCheck(function () {\n return this.put(new G())\n })\n }\n})\n\nregister(G, 'G')\n","import {\n nodeOrNew,\n register,\n wrapWithAttrCheck,\n extend\n} from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport { xlink } from '../modules/core/namespaces.js'\nimport Container from './Container.js'\nimport * as containerGeometry from '../modules/core/containerGeometry.js'\n\nexport default class A extends Container {\n constructor(node, attrs = node) {\n super(nodeOrNew('a', node), attrs)\n }\n\n // Link target attribute\n target(target) {\n return this.attr('target', target)\n }\n\n // Link url\n to(url) {\n return this.attr('href', url, xlink)\n }\n}\n\nextend(A, containerGeometry)\n\nregisterMethods({\n Container: {\n // Create a hyperlink element\n link: wrapWithAttrCheck(function (url) {\n return this.put(new A()).to(url)\n })\n },\n Element: {\n unlink() {\n const link = this.linker()\n\n if (!link) return this\n\n const parent = link.parent()\n\n if (!parent) {\n return this.remove()\n }\n\n const index = parent.index(link)\n parent.add(this, index)\n\n link.remove()\n return this\n },\n linkTo(url) {\n // reuse old link if possible\n let link = this.linker()\n\n if (!link) {\n link = new A()\n this.wrap(link)\n }\n\n if (typeof url === 'function') {\n url.call(link, link)\n } else {\n link.to(url)\n }\n\n return this\n },\n linker() {\n const link = this.parent()\n if (link && link.node.nodeName.toLowerCase() === 'a') {\n return link\n }\n\n return null\n }\n }\n})\n\nregister(A, 'A')\n","import { nodeOrNew, register, wrapWithAttrCheck } from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport Container from './Container.js'\nimport baseFind from '../modules/core/selector.js'\n\nexport default class Mask extends Container {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('mask', node), attrs)\n }\n\n // Unmask all masked elements and remove itself\n remove() {\n // unmask all targets\n this.targets().forEach(function (el) {\n el.unmask()\n })\n\n // remove mask from parent\n return super.remove()\n }\n\n targets() {\n return baseFind('svg [mask*=' + this.id() + ']')\n }\n}\n\nregisterMethods({\n Container: {\n mask: wrapWithAttrCheck(function () {\n return this.defs().put(new Mask())\n })\n },\n Element: {\n // Distribute mask to svg element\n masker() {\n return this.reference('mask')\n },\n\n maskWith(element) {\n // use given mask or create a new one\n const masker =\n element instanceof Mask ? element : this.parent().mask().add(element)\n\n // apply mask\n return this.attr('mask', 'url(#' + masker.id() + ')')\n },\n\n // Unmask element\n unmask() {\n return this.attr('mask', null)\n }\n }\n})\n\nregister(Mask, 'Mask')\n","import { nodeOrNew, register } from '../utils/adopter.js'\nimport Element from './Element.js'\nimport SVGNumber from '../types/SVGNumber.js'\nimport { registerMethods } from '../utils/methods.js'\n\nexport default class Stop extends Element {\n constructor(node, attrs = node) {\n super(nodeOrNew('stop', node), attrs)\n }\n\n // add color stops\n update(o) {\n if (typeof o === 'number' || o instanceof SVGNumber) {\n o = {\n offset: arguments[0],\n color: arguments[1],\n opacity: arguments[2]\n }\n }\n\n // set attributes\n if (o.opacity != null) this.attr('stop-opacity', o.opacity)\n if (o.color != null) this.attr('stop-color', o.color)\n if (o.offset != null) this.attr('offset', new SVGNumber(o.offset))\n\n return this\n }\n}\n\nregisterMethods({\n Gradient: {\n // Add a color stop\n stop: function (offset, color, opacity) {\n return this.put(new Stop()).update(offset, color, opacity)\n }\n }\n})\n\nregister(Stop, 'Stop')\n","import { nodeOrNew, register } from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport { unCamelCase } from '../utils/utils.js'\nimport Element from './Element.js'\n\nfunction cssRule(selector, rule) {\n if (!selector) return ''\n if (!rule) return selector\n\n let ret = selector + '{'\n\n for (const i in rule) {\n ret += unCamelCase(i) + ':' + rule[i] + ';'\n }\n\n ret += '}'\n\n return ret\n}\n\nexport default class Style extends Element {\n constructor(node, attrs = node) {\n super(nodeOrNew('style', node), attrs)\n }\n\n addText(w = '') {\n this.node.textContent += w\n return this\n }\n\n font(name, src, params = {}) {\n return this.rule('@font-face', {\n fontFamily: name,\n src: src,\n ...params\n })\n }\n\n rule(selector, obj) {\n return this.addText(cssRule(selector, obj))\n }\n}\n\nregisterMethods('Dom', {\n style(selector, obj) {\n return this.put(new Style()).rule(selector, obj)\n },\n fontface(name, src, params) {\n return this.put(new Style()).font(name, src, params)\n }\n})\n\nregister(Style, 'Style')\n","import { nodeOrNew, register, wrapWithAttrCheck } from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport { xlink } from '../modules/core/namespaces.js'\nimport Path from './Path.js'\nimport PathArray from '../types/PathArray.js'\nimport Text from './Text.js'\nimport baseFind from '../modules/core/selector.js'\n\nexport default class TextPath extends Text {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('textPath', node), attrs)\n }\n\n // return the array of the path track element\n array() {\n const track = this.track()\n\n return track ? track.array() : null\n }\n\n // Plot path if any\n plot(d) {\n const track = this.track()\n let pathArray = null\n\n if (track) {\n pathArray = track.plot(d)\n }\n\n return d == null ? pathArray : this\n }\n\n // Get the path element\n track() {\n return this.reference('href')\n }\n}\n\nregisterMethods({\n Container: {\n textPath: wrapWithAttrCheck(function (text, path) {\n // Convert text to instance if needed\n if (!(text instanceof Text)) {\n text = this.text(text)\n }\n\n return text.path(path)\n })\n },\n Text: {\n // Create path for text to run on\n path: wrapWithAttrCheck(function (track, importNodes = true) {\n const textPath = new TextPath()\n\n // if track is a path, reuse it\n if (!(track instanceof Path)) {\n // create path element\n track = this.defs().path(track)\n }\n\n // link textPath to path and add content\n textPath.attr('href', '#' + track, xlink)\n\n // Transplant all nodes from text to textPath\n let node\n if (importNodes) {\n while ((node = this.node.firstChild)) {\n textPath.node.appendChild(node)\n }\n }\n\n // add textPath element as child node and return textPath\n return this.put(textPath)\n }),\n\n // Get the textPath children\n textPath() {\n return this.findOne('textPath')\n }\n },\n Path: {\n // creates a textPath from this path\n text: wrapWithAttrCheck(function (text) {\n // Convert text to instance if needed\n if (!(text instanceof Text)) {\n text = new Text().addTo(this.parent()).text(text)\n }\n\n // Create textPath from text and path and return\n return text.path(this)\n }),\n\n targets() {\n return baseFind('svg textPath').filter((node) => {\n return (node.attr('href') || '').includes(this.id())\n })\n\n // Does not work in IE11. Use when IE support is dropped\n // return baseFind('svg textPath[*|href*=' + this.id() + ']')\n }\n }\n})\n\nTextPath.prototype.MorphArray = PathArray\nregister(TextPath, 'TextPath')\n","import { nodeOrNew, register, wrapWithAttrCheck } from '../utils/adopter.js'\nimport { registerMethods } from '../utils/methods.js'\nimport { xlink } from '../modules/core/namespaces.js'\nimport Shape from './Shape.js'\n\nexport default class Use extends Shape {\n constructor(node, attrs = node) {\n super(nodeOrNew('use', node), attrs)\n }\n\n // Use element as a reference\n use(element, file) {\n // Set lined element\n return this.attr('href', (file || '') + '#' + element, xlink)\n }\n}\n\nregisterMethods({\n Container: {\n // Create a use element\n use: wrapWithAttrCheck(function (element, file) {\n return this.put(new Use()).use(element, file)\n })\n }\n})\n\nregister(Use, 'Use')\n","/* Optional Modules */\nimport './modules/optional/arrange.js'\nimport './modules/optional/class.js'\nimport './modules/optional/css.js'\nimport './modules/optional/data.js'\nimport './modules/optional/memory.js'\nimport './modules/optional/sugar.js'\nimport './modules/optional/transform.js'\n\nimport { extend, makeInstance } from './utils/adopter.js'\nimport { getMethodNames, getMethodsFor } from './utils/methods.js'\nimport Box from './types/Box.js'\nimport Color from './types/Color.js'\nimport Container from './elements/Container.js'\nimport Defs from './elements/Defs.js'\nimport Dom from './elements/Dom.js'\nimport Element from './elements/Element.js'\nimport Ellipse from './elements/Ellipse.js'\nimport EventTarget from './types/EventTarget.js'\nimport Fragment from './elements/Fragment.js'\nimport Gradient from './elements/Gradient.js'\nimport Image from './elements/Image.js'\nimport Line from './elements/Line.js'\nimport List from './types/List.js'\nimport Marker from './elements/Marker.js'\nimport Matrix from './types/Matrix.js'\nimport Morphable, {\n NonMorphable,\n ObjectBag,\n TransformBag,\n makeMorphable,\n registerMorphableType\n} from './animation/Morphable.js'\nimport Path from './elements/Path.js'\nimport PathArray from './types/PathArray.js'\nimport Pattern from './elements/Pattern.js'\nimport PointArray from './types/PointArray.js'\nimport Point from './types/Point.js'\nimport Polygon from './elements/Polygon.js'\nimport Polyline from './elements/Polyline.js'\nimport Rect from './elements/Rect.js'\nimport Runner from './animation/Runner.js'\nimport SVGArray from './types/SVGArray.js'\nimport SVGNumber from './types/SVGNumber.js'\nimport Shape from './elements/Shape.js'\nimport Svg from './elements/Svg.js'\nimport Symbol from './elements/Symbol.js'\nimport Text from './elements/Text.js'\nimport Tspan from './elements/Tspan.js'\nimport * as defaults from './modules/core/defaults.js'\nimport * as utils from './utils/utils.js'\nimport * as namespaces from './modules/core/namespaces.js'\nimport * as regex from './modules/core/regex.js'\n\nexport {\n Morphable,\n registerMorphableType,\n makeMorphable,\n TransformBag,\n ObjectBag,\n NonMorphable\n}\n\nexport { defaults, utils, namespaces, regex }\nexport const SVG = makeInstance\nexport { default as parser } from './modules/core/parser.js'\nexport { default as find } from './modules/core/selector.js'\nexport * from './modules/core/event.js'\nexport * from './utils/adopter.js'\nexport {\n getWindow,\n registerWindow,\n restoreWindow,\n saveWindow,\n withWindow\n} from './utils/window.js'\n\n/* Animation Modules */\nexport { default as Animator } from './animation/Animator.js'\nexport {\n Controller,\n Ease,\n PID,\n Spring,\n easing\n} from './animation/Controller.js'\nexport { default as Queue } from './animation/Queue.js'\nexport { default as Runner } from './animation/Runner.js'\nexport { default as Timeline } from './animation/Timeline.js'\n\n/* Types */\nexport { default as Array } from './types/SVGArray.js'\nexport { default as Box } from './types/Box.js'\nexport { default as Color } from './types/Color.js'\nexport { default as EventTarget } from './types/EventTarget.js'\nexport { default as Matrix } from './types/Matrix.js'\nexport { default as Number } from './types/SVGNumber.js'\nexport { default as PathArray } from './types/PathArray.js'\nexport { default as Point } from './types/Point.js'\nexport { default as PointArray } from './types/PointArray.js'\nexport { default as List } from './types/List.js'\n\n/* Elements */\nexport { default as Circle } from './elements/Circle.js'\nexport { default as ClipPath } from './elements/ClipPath.js'\nexport { default as Container } from './elements/Container.js'\nexport { default as Defs } from './elements/Defs.js'\nexport { default as Dom } from './elements/Dom.js'\nexport { default as Element } from './elements/Element.js'\nexport { default as Ellipse } from './elements/Ellipse.js'\nexport { default as ForeignObject } from './elements/ForeignObject.js'\nexport { default as Fragment } from './elements/Fragment.js'\nexport { default as Gradient } from './elements/Gradient.js'\nexport { default as G } from './elements/G.js'\nexport { default as A } from './elements/A.js'\nexport { default as Image } from './elements/Image.js'\nexport { default as Line } from './elements/Line.js'\nexport { default as Marker } from './elements/Marker.js'\nexport { default as Mask } from './elements/Mask.js'\nexport { default as Path } from './elements/Path.js'\nexport { default as Pattern } from './elements/Pattern.js'\nexport { default as Polygon } from './elements/Polygon.js'\nexport { default as Polyline } from './elements/Polyline.js'\nexport { default as Rect } from './elements/Rect.js'\nexport { default as Shape } from './elements/Shape.js'\nexport { default as Stop } from './elements/Stop.js'\nexport { default as Style } from './elements/Style.js'\nexport { default as Svg } from './elements/Svg.js'\nexport { default as Symbol } from './elements/Symbol.js'\nexport { default as Text } from './elements/Text.js'\nexport { default as TextPath } from './elements/TextPath.js'\nexport { default as Tspan } from './elements/Tspan.js'\nexport { default as Use } from './elements/Use.js'\n\nextend([Svg, Symbol, Image, Pattern, Marker], getMethodsFor('viewbox'))\n\nextend([Line, Polyline, Polygon, Path], getMethodsFor('marker'))\n\nextend(Text, getMethodsFor('Text'))\nextend(Path, getMethodsFor('Path'))\n\nextend(Defs, getMethodsFor('Defs'))\n\nextend([Text, Tspan], getMethodsFor('Tspan'))\n\nextend([Rect, Ellipse, Gradient, Runner], getMethodsFor('radius'))\n\nextend(EventTarget, getMethodsFor('EventTarget'))\nextend(Dom, getMethodsFor('Dom'))\nextend(Element, getMethodsFor('Element'))\nextend(Shape, getMethodsFor('Shape'))\nextend([Container, Fragment], getMethodsFor('Container'))\nextend(Gradient, getMethodsFor('Gradient'))\n\nextend(Runner, getMethodsFor('Runner'))\n\nList.extend(getMethodNames())\n\nregisterMorphableType([\n SVGNumber,\n Color,\n Box,\n Matrix,\n SVGArray,\n PointArray,\n PathArray,\n Point\n])\n\nmakeMorphable()\n","/*\n * Vex Chords v2\n * Mohit Muthanna Cheppudira -- http://0xfe.blogspot.com\n */\n\nimport { SVG } from '@svgdotjs/svg.js';\n\n// ChordBox implements the rendering logic for the chord\n// diagrams.\nclass ChordBox {\n // sel can be a selector or an element.\n constructor(sel, params) {\n this.sel = sel;\n this.params = {\n ...{\n numStrings: 6,\n numFrets: 5,\n x: 0,\n y: 0,\n width: 100,\n height: 120,\n strokeWidth: 1,\n showTuning: true,\n defaultColor: '#666',\n bgColor: '#fff',\n labelColor: '#fff',\n fontFamily: '-apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"',\n fontSize: undefined,\n fontStyle: 'light',\n fontWeight: '100',\n labelWeight: '100',\n },\n ...params,\n };\n\n // Setup defaults if not specifically overridden\n ['bridgeColor', 'stringColor', 'fretColor', 'strokeColor', 'textColor'].forEach((param) => {\n this.params[param] = this.params[param] || this.params.defaultColor;\n });\n\n ['stringWidth', 'fretWidth'].forEach((param) => {\n this.params[param] = this.params[param] || this.params.strokeWidth;\n });\n\n // Create canvas and add it to the DOM\n this.canvas = SVG()\n .addTo(sel)\n .size(this.params.width, this.params.height);\n\n // Size and shift board\n this.width = this.params.width * 0.75;\n this.height = this.params.height * 0.75;\n this.x = this.params.x + this.params.width * 0.15;\n this.y = this.params.y + this.params.height * 0.15;\n\n this.numStrings = this.params.numStrings;\n this.numFrets = this.params.numFrets;\n\n this.spacing = this.width / this.numStrings;\n this.fretSpacing = this.height / (this.numFrets + 2);\n\n // Add room on sides for finger positions on 1. and 6. string\n this.x += this.spacing / 2;\n this.y += this.fretSpacing;\n\n this.metrics = {\n circleRadius: this.width / 20,\n barreRadius: this.width / 25,\n fontSize: this.params.fontSize || Math.ceil(this.width / 8),\n barShiftX: this.width / 28,\n bridgeStrokeWidth: Math.ceil(this.height / 36),\n };\n\n // Content\n this.position = 0;\n this.positionText = 0;\n this.chord = [];\n this.bars = [];\n this.tuning = ['E', 'A', 'D', 'G', 'B', 'E'];\n }\n\n setNumFrets(numFrets) {\n this.numFrets = numFrets;\n this.fretSpacing = this.height / (this.numFrets + 1);\n return this;\n }\n\n setPositionText(position) {\n this.positionText = position;\n return this;\n }\n\n drawText(x, y, msg, attrs) {\n const textAttrs = {\n ...{\n family: this.params.fontFamily,\n size: this.metrics.fontSize,\n style: this.params.fontStyle,\n weight: this.params.fontWeight,\n },\n ...attrs,\n };\n\n const text = this.canvas\n .text(`${msg}`)\n .stroke(this.params.textColor)\n .fill(this.params.textColor)\n .font(textAttrs);\n\n return text.move(x - text.length() / 2, y);\n }\n\n drawLine(x, y, newX, newY) {\n return this.canvas.line(0, 0, newX - x, newY - y).move(x, y);\n }\n\n draw({\n chord, position, barres, positionText, tuning,\n }) {\n this.chord = chord;\n this.position = position || 0;\n this.positionText = positionText || 0;\n this.barres = barres || [];\n this.tuning = tuning || ['E', 'A', 'D', 'G', 'B', 'E'];\n if (this.tuning.length === 0) {\n this.fretSpacing = this.height / (this.numFrets + 1);\n }\n\n const { spacing } = this;\n const { fretSpacing } = this;\n\n // Draw guitar bridge\n if (this.position <= 1) {\n const fromX = this.x;\n const fromY = this.y - this.metrics.bridgeStrokeWidth;\n this.canvas\n .rect(this.x + spacing * (this.numStrings - 1) - fromX, this.y - fromY)\n .move(fromX, fromY)\n .stroke({ width: 0 })\n .fill(this.params.bridgeColor);\n } else {\n // Draw position number\n this.drawText(this.x - this.spacing / 2 - this.spacing * 0.1, this.y + this.fretSpacing * this.positionText, this.position);\n }\n\n // Draw strings\n for (let i = 0; i < this.numStrings; i += 1) {\n this.drawLine(this.x + spacing * i, this.y, this.x + spacing * i, this.y + fretSpacing * this.numFrets).stroke({\n width: this.params.stringWidth,\n color: this.params.stringColor,\n });\n }\n\n // Draw frets\n for (let i = 0; i < this.numFrets + 1; i += 1) {\n this.drawLine(this.x, this.y + fretSpacing * i, this.x + spacing * (this.numStrings - 1), this.y + fretSpacing * i).stroke({\n width: this.params.fretWidth,\n color: this.params.fretColor,\n });\n }\n\n // Draw tuning keys\n if (this.params.showTuning && this.tuning.length !== 0) {\n for (let i = 0; i < Math.min(this.numStrings, this.tuning.length); i += 1) {\n this.drawText(this.x + this.spacing * i, this.y + this.numFrets * this.fretSpacing + this.fretSpacing / 12, this.tuning[i]);\n }\n }\n\n // Draw chord\n for (let i = 0; i < this.chord.length; i += 1) {\n // Light up string, fret, and optional label.\n this.lightUp({\n string: this.chord[i][0],\n fret: this.chord[i][1],\n label: this.chord.length > 2 ? this.chord[i][2] : undefined,\n });\n }\n\n // Draw barres\n for (let i = 0; i < this.barres.length; i += 1) {\n this.lightBar(this.barres[i].fromString, this.barres[i].toString, this.barres[i].fret);\n }\n }\n\n lightUp({ string, fret, label }) {\n const stringNum = this.numStrings - string;\n const shiftPosition = this.position === 1 && this.positionText === 1 ? this.positionText : 0;\n\n const mute = fret === 'x';\n const fretNum = fret === 'x' ? 0 : fret - shiftPosition;\n\n const x = this.x + this.spacing * stringNum;\n let y = this.y + this.fretSpacing * fretNum;\n\n if (fretNum === 0) {\n y -= this.metrics.bridgeStrokeWidth;\n }\n\n if (!mute) {\n this.canvas\n .circle()\n .move(x, y - this.fretSpacing / 2)\n .radius(this.metrics.circleRadius)\n .stroke({ color: this.params.strokeColor, width: this.params.strokeWidth })\n .fill(fretNum > 0 ? this.params.strokeColor : this.params.bgColor);\n } else {\n this.drawText(x, y - this.fretSpacing, 'X');\n }\n\n if (label) {\n const fontSize = this.metrics.fontSize * 0.55;\n const textYShift = fontSize * 0.66;\n this.drawText(x, y - this.fretSpacing / 2 - textYShift, label, {\n weight: this.params.labelWeight,\n size: fontSize,\n })\n .stroke({\n width: 0.7,\n color: fretNum !== 0 ? this.params.labelColor : this.params.strokeColor,\n })\n .fill(fretNum !== 0 ? this.params.labelColor : this.params.strokeColor);\n }\n\n return this;\n }\n\n lightBar(stringFrom, stringTo, theFretNum) {\n let fretNum = theFretNum;\n if (this.position === 1 && this.positionText === 1) {\n fretNum -= this.positionText;\n }\n\n const stringFromNum = this.numStrings - stringFrom;\n const stringToNum = this.numStrings - stringTo;\n\n const x = this.x + this.spacing * stringFromNum - this.metrics.barShiftX;\n const xTo = this.x + this.spacing * stringToNum + this.metrics.barShiftX;\n\n const y = this.y + this.fretSpacing * (fretNum - 1) + this.fretSpacing / 4;\n const yTo = this.y + this.fretSpacing * (fretNum - 1) + (this.fretSpacing / 4) * 3;\n\n this.canvas\n .rect(xTo - x, yTo - y)\n .move(x, y)\n .radius(this.metrics.barreRadius)\n .fill(this.params.strokeColor);\n\n return this;\n }\n}\n\nexport default ChordBox;\n","/*\n * Vex Chords v2\n * Mohit Muthanna Cheppudira -- http://0xfe.blogspot.com\n */\n\nimport ChordBox from './chordbox';\nimport { POSITIONS, SHAPES, build } from './builder';\n\nfunction draw(sel, chord, opts) {\n return new ChordBox(sel, opts).draw(chord);\n}\n\nexport {\n POSITIONS, SHAPES, ChordBox, build, draw,\n};\n","//import \"./styles.css\";\nimport * as vexchords from \"vexchords\";\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n var elements = document.getElementsByClassName(\"chord-form\");\n Array.from(elements).forEach((chord_form, index) => {\n let chord = chord_form.dataset.fingering;\n if (typeof chord === \"string\") chord = JSON.parse(chord);\n vexchords.draw(chord_form, chord);\n });\n});\n","// Generated by peggy v. 4.2.0 (ts-pegjs plugin v. 3.1.0 )\n//\n// https://peggyjs.org/ https://github.com/metadevpro/ts-pegjs\n\"use strict\";\nfunction $33f7017b34767c5f$var$peg$padEnd(str, targetLength, padString) {\n padString = padString || ' ';\n if (str.length > targetLength) return str;\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\nclass $33f7017b34767c5f$export$628c65c376ead699 extends Error {\n static buildMessage(expected, found) {\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, \"\\\\\\\"\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, (ch)=>\"\\\\x0\" + hex(ch)).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, (ch)=>\"\\\\x\" + hex(ch));\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, (ch)=>\"\\\\x0\" + hex(ch)).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, (ch)=>\"\\\\x\" + hex(ch));\n }\n function describeExpectation(expectation) {\n switch(expectation.type){\n case \"literal\":\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n case \"class\":\n const escapedParts = expectation.parts.map((part)=>{\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n case \"any\":\n return \"any character\";\n case \"end\":\n return \"end of input\";\n case \"other\":\n return expectation.description;\n }\n }\n function describeExpected(expected1) {\n const descriptions = expected1.map(describeExpectation);\n let i;\n let j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for(i = 1, j = 1; i < descriptions.length; i++)if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n descriptions.length = j;\n }\n switch(descriptions.length){\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found1) {\n return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n }\n constructor(message, expected, found, location){\n super();\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = \"PeggySyntaxError\";\n if (typeof Object.setPrototypeOf === \"function\") Object.setPrototypeOf(this, $33f7017b34767c5f$export$628c65c376ead699.prototype);\n else this.__proto__ = $33f7017b34767c5f$export$628c65c376ead699.prototype;\n if (typeof Error.captureStackTrace === \"function\") Error.captureStackTrace(this, $33f7017b34767c5f$export$628c65c376ead699);\n }\n format(sources) {\n let str = 'Error: ' + this.message;\n if (this.location) {\n let src = null;\n let k;\n for(k = 0; k < sources.length; k++)if (sources[k].grammarSource === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n let s = this.location.start;\n let loc = this.location.source + ':' + s.line + ':' + s.column;\n if (src) {\n let e = this.location.end;\n let filler = $33f7017b34767c5f$var$peg$padEnd('', s.line.toString().length, ' ');\n let line = src[s.line - 1];\n let last = s.line === e.line ? e.column : line.length + 1;\n str += '\\n --> ' + loc + '\\n' + filler + ' |\\n' + s.line + ' | ' + line + '\\n' + filler + ' | ' + $33f7017b34767c5f$var$peg$padEnd('', s.column - 1, ' ') + $33f7017b34767c5f$var$peg$padEnd('', last - s.column, '^');\n } else str += '\\n at ' + loc;\n }\n return str;\n }\n}\nfunction $33f7017b34767c5f$var$peg$parse(input, options) {\n options = options !== undefined ? options : {};\n const peg$FAILED = {};\n const peg$source = options.grammarSource;\n const peg$startRuleFunctions = {\n Chord: peg$parseChord\n };\n let peg$startRuleFunction = peg$parseChord;\n const peg$c0 = function(chord) {\n return {\n type: \"chord\",\n ...chord,\n column: location().start.column\n };\n };\n const peg$c1 = /^[#b]/;\n const peg$c2 = peg$classExpectation([\n \"#\",\n \"b\"\n ], false, false);\n const peg$c3 = function(root, modifier, suffix, bass) {\n return {\n base: root,\n modifier: modifier,\n suffix: suffix,\n ...bass,\n chordType: \"symbol\"\n };\n };\n const peg$c4 = function(bass) {\n return {\n base: null,\n modifier: null,\n suffix: null,\n ...bass,\n chordType: \"symbol\"\n };\n };\n const peg$c5 = /^[A-Ga-g]/;\n const peg$c6 = peg$classExpectation([\n [\n \"A\",\n \"G\"\n ],\n [\n \"a\",\n \"g\"\n ]\n ], false, false);\n const peg$c7 = \"/\";\n const peg$c8 = peg$literalExpectation(\"/\", false);\n const peg$c9 = function(root, modifier) {\n return {\n bassBase: root,\n bassModifier: modifier\n };\n };\n const peg$c10 = function(root, modifier, suffix, bass) {\n return {\n base: root,\n modifier: modifier,\n suffix: suffix,\n ...bass,\n chordType: \"solfege\"\n };\n };\n const peg$c11 = function(bass) {\n return {\n base: null,\n modifier: null,\n suffix: null,\n ...bass,\n chordType: \"solfege\"\n };\n };\n const peg$c12 = \"do\";\n const peg$c13 = peg$literalExpectation(\"Do\", true);\n const peg$c14 = \"re\";\n const peg$c15 = peg$literalExpectation(\"Re\", true);\n const peg$c16 = \"mi\";\n const peg$c17 = peg$literalExpectation(\"Mi\", true);\n const peg$c18 = \"fa\";\n const peg$c19 = peg$literalExpectation(\"Fa\", true);\n const peg$c20 = \"sol\";\n const peg$c21 = peg$literalExpectation(\"Sol\", true);\n const peg$c22 = \"la\";\n const peg$c23 = peg$literalExpectation(\"La\", true);\n const peg$c24 = \"si\";\n const peg$c25 = peg$literalExpectation(\"Si\", true);\n const peg$c26 = function(modifier, root, suffix, bass) {\n return {\n base: root,\n modifier: modifier,\n suffix: suffix,\n ...bass,\n chordType: \"numeral\"\n };\n };\n const peg$c27 = function(bass) {\n return {\n base: null,\n modifier: null,\n suffix: null,\n ...bass,\n chordType: \"numeral\"\n };\n };\n const peg$c28 = \"iii\";\n const peg$c29 = peg$literalExpectation(\"III\", true);\n const peg$c30 = \"vii\";\n const peg$c31 = peg$literalExpectation(\"VII\", true);\n const peg$c32 = \"ii\";\n const peg$c33 = peg$literalExpectation(\"II\", true);\n const peg$c34 = \"iv\";\n const peg$c35 = peg$literalExpectation(\"IV\", true);\n const peg$c36 = \"vi\";\n const peg$c37 = peg$literalExpectation(\"VI\", true);\n const peg$c38 = /^[IV]/i;\n const peg$c39 = peg$classExpectation([\n \"I\",\n \"V\"\n ], false, true);\n const peg$c40 = function(modifier, root) {\n return {\n bassBase: root,\n bassModifier: modifier\n };\n };\n const peg$c41 = function(modifier, root, suffix, bass) {\n return {\n base: root,\n modifier: modifier,\n suffix: suffix,\n ...bass,\n chordType: \"numeric\"\n };\n };\n const peg$c42 = function(bass) {\n return {\n base: null,\n modifier: null,\n suffix: null,\n ...bass,\n chordType: \"numeric\"\n };\n };\n const peg$c43 = /^[1-7]/;\n const peg$c44 = peg$classExpectation([\n [\n \"1\",\n \"7\"\n ]\n ], false, false);\n const peg$c45 = /^[a-zA-Z0-9()#+\\-o\\u266D\\u266F\\u0394]/;\n const peg$c46 = peg$classExpectation([\n [\n \"a\",\n \"z\"\n ],\n [\n \"A\",\n \"Z\"\n ],\n [\n \"0\",\n \"9\"\n ],\n \"(\",\n \")\",\n \"#\",\n \"+\",\n \"-\",\n \"o\",\n \"\\u266D\",\n \"\\u266F\",\n \"\\u0394\"\n ], false, false);\n let peg$currPos = 0;\n let peg$savedPos = 0;\n const peg$posDetailsCache = [\n {\n line: 1,\n column: 1\n }\n ];\n let peg$maxFailPos = 0;\n let peg$maxFailExpected = [];\n let peg$silentFails = 0;\n let peg$result;\n if (options.startRule !== undefined) {\n if (!(options.startRule in peg$startRuleFunctions)) throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError([\n peg$otherExpectation(description)\n ], input.substring(peg$savedPos, peg$currPos), location1);\n }\n function error(message, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location1);\n }\n function peg$literalExpectation(text1, ignoreCase) {\n return {\n type: \"literal\",\n text: text1,\n ignoreCase: ignoreCase\n };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return {\n type: \"class\",\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase\n };\n }\n function peg$anyExpectation() {\n return {\n type: \"any\"\n };\n }\n function peg$endExpectation() {\n return {\n type: \"end\"\n };\n }\n function peg$otherExpectation(description) {\n return {\n type: \"other\",\n description: description\n };\n }\n function peg$computePosDetails(pos) {\n let details = peg$posDetailsCache[pos];\n let p;\n if (details) return details;\n else {\n p = pos - 1;\n while(!peg$posDetailsCache[p])p--;\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while(p < pos){\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else details.column++;\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n const startPosDetails = peg$computePosDetails(startPos);\n const endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected1) {\n if (peg$currPos < peg$maxFailPos) return;\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected1);\n }\n function peg$buildSimpleError(message, location1) {\n return new $33f7017b34767c5f$export$628c65c376ead699(message, [], \"\", location1);\n }\n function peg$buildStructuredError(expected1, found, location1) {\n return new $33f7017b34767c5f$export$628c65c376ead699($33f7017b34767c5f$export$628c65c376ead699.buildMessage(expected1, found), expected1, found, location1);\n }\n function peg$parseChord() {\n let s0, s1;\n s0 = peg$currPos;\n s1 = peg$parseNumeral();\n if (s1 === peg$FAILED) {\n s1 = peg$parseNumeric();\n if (s1 === peg$FAILED) {\n s1 = peg$parseChordSolfege();\n if (s1 === peg$FAILED) s1 = peg$parseChordSymbol();\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseChordModifier() {\n let s0;\n if (peg$c1.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c2);\n }\n return s0;\n }\n function peg$parseChordSymbol() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parseChordSymbolRoot();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordModifier();\n if (s2 === peg$FAILED) s2 = null;\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = peg$parseChordSuffix();\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseChordSymbolBass();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c3(s1, s2, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseChordSymbolBass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c4(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseChordSymbolRoot() {\n let s0;\n if (peg$c5.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c6);\n }\n return s0;\n }\n function peg$parseChordSymbolBass() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c8);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordSymbolRoot();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseChordModifier();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c9(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordSolfege() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parseChordSolfegeRoot();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordModifier();\n if (s2 === peg$FAILED) s2 = null;\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = peg$parseChordSuffix();\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseChordSolfegeBass();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c10(s1, s2, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseChordSolfegeBass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c11(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseChordSolfegeRoot() {\n let s0;\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c12) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c13);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c14) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c15);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c16) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c17);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c18) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c19);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3).toLowerCase() === peg$c20) {\n s0 = input.substr(peg$currPos, 3);\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c21);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c22) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c23);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c24) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c25);\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseChordSolfegeBass() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c8);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordSolfegeRoot();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseChordModifier();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c9(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseNumeral() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parseChordModifier();\n if (s1 === peg$FAILED) s1 = null;\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNumeralRoot();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = peg$parseChordSuffix();\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseNumeralBass();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c26(s1, s2, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseNumeralBass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c27(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseNumeralRoot() {\n let s0;\n if (input.substr(peg$currPos, 3).toLowerCase() === peg$c28) {\n s0 = input.substr(peg$currPos, 3);\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c29);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3).toLowerCase() === peg$c30) {\n s0 = input.substr(peg$currPos, 3);\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c32) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c33);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c34) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c35);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c36) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c37);\n }\n if (s0 === peg$FAILED) {\n if (peg$c38.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c39);\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseNumeralBass() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c8);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordModifier();\n if (s2 === peg$FAILED) s2 = null;\n if (s2 !== peg$FAILED) {\n s3 = peg$parseNumeralRoot();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c40(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseNumeric() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parseChordModifier();\n if (s1 === peg$FAILED) s1 = null;\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNumericRoot();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = peg$parseChordSuffix();\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseNumericBass();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c41(s1, s2, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseNumericBass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c42(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseNumericRoot() {\n let s0;\n if (peg$c43.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c44);\n }\n return s0;\n }\n function peg$parseNumericBass() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c7;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c8);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordModifier();\n if (s2 === peg$FAILED) s2 = null;\n if (s2 !== peg$FAILED) {\n s3 = peg$parseNumericRoot();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c40(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordSuffix() {\n let s0, s1;\n s0 = [];\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c46);\n }\n while(s1 !== peg$FAILED){\n s0.push(s1);\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c46);\n }\n }\n return s0;\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) return peg$result;\n else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) peg$fail(peg$endExpectation());\n throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n }\n}\nconst $33f7017b34767c5f$export$98e6a39c04603d36 = $33f7017b34767c5f$var$peg$parse;\n\n\n/**\n * Used to mark a paragraph as bridge\n * @constant\n * @type {string}\n */ const $72b24102c7d826fd$export$78d8c50e853acd10 = 'bridge';\nconst $72b24102c7d826fd$export$8db6c706fc9142b2 = 'chorus';\nconst $72b24102c7d826fd$export$e2b0b9a5e613f348 = 'grid';\nconst $72b24102c7d826fd$export$c5a6fe907430212e = 'indeterminate';\nconst $72b24102c7d826fd$export$c53d0f541b41b88e = 'none';\nconst $72b24102c7d826fd$export$f1c9dd0f5207dd5e = 'tab';\nconst $72b24102c7d826fd$export$4b194284baed1659 = 'verse';\nconst $72b24102c7d826fd$export$6a5a2eab72b6e3d = 'ly';\nconst $72b24102c7d826fd$export$92249c36c213e508 = 'abc';\nconst $72b24102c7d826fd$export$27c95a7104c1f7aa = 'symbol';\nconst $72b24102c7d826fd$export$4d318981b5a83836 = 'numeric';\nconst $72b24102c7d826fd$export$1321df9b16c30c6a = 'numeral';\nconst $72b24102c7d826fd$export$539a6499f4711c57 = 'solfege';\nconst $72b24102c7d826fd$export$6145372d252f6576 = [\n 'I',\n 'II',\n 'III',\n 'IV',\n 'V',\n 'VI',\n 'VII'\n];\nconst $72b24102c7d826fd$export$1ea14522906630af = 'b';\nconst $72b24102c7d826fd$export$f5b1d6b4244c9536 = '#';\nconst $72b24102c7d826fd$export$f0f7b592ea674eb2 = 'NM';\nconst $72b24102c7d826fd$export$f23edc19d247fd25 = 'm';\nconst $72b24102c7d826fd$export$39615881bb0d21f6 = 'M';\n\n\n/*\n ⚠️⚠️⚠️ NOTE: this file has been generated automatically.\n Please do NOT edit this file directly, but instead:\n - edit the data source, located in `data/scales.ts`\n - run `yarn build:code-generate` to re-generate this file.\n */ \nconst $0cb401ed3f1d0550$export$7e1516eaf3ebe01f = {\n [(0, $72b24102c7d826fd$export$27c95a7104c1f7aa)]: {\n [(0, $72b24102c7d826fd$export$39615881bb0d21f6)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n C: 0,\n D: 2,\n E: 4,\n F: 5,\n G: 7,\n A: 9,\n B: 11\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n B: 0,\n C: 1,\n D: 3,\n E: 5,\n F: 6,\n G: 8,\n A: 10\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n D: 1,\n E: 3,\n F: 4,\n G: 6,\n A: 8,\n B: 10,\n C: 11\n }\n },\n [(0, $72b24102c7d826fd$export$f23edc19d247fd25)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n C: 0,\n D: 2,\n E: 4,\n F: 5,\n G: 7,\n A: 9,\n B: 11\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n B: 0,\n C: 1,\n D: 3,\n E: 5,\n F: 6,\n G: 8,\n A: 10\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n D: 1,\n E: 3,\n F: 4,\n G: 6,\n A: 8,\n B: 10,\n C: 11\n }\n }\n },\n [(0, $72b24102c7d826fd$export$539a6499f4711c57)]: {\n [(0, $72b24102c7d826fd$export$39615881bb0d21f6)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n Do: 0,\n Re: 2,\n Mi: 4,\n Fa: 5,\n Sol: 7,\n La: 9,\n Si: 11\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n Si: 0,\n Do: 1,\n Re: 3,\n Mi: 5,\n Fa: 6,\n Sol: 8,\n La: 10\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n Re: 1,\n Mi: 3,\n Fa: 4,\n Sol: 6,\n La: 8,\n Si: 10,\n Do: 11\n }\n },\n [(0, $72b24102c7d826fd$export$f23edc19d247fd25)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n Do: 0,\n Re: 2,\n Mi: 4,\n Fa: 5,\n Sol: 7,\n La: 9,\n Si: 11\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n Si: 0,\n Do: 1,\n Re: 3,\n Mi: 5,\n Fa: 6,\n Sol: 8,\n La: 10\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n Re: 1,\n Mi: 3,\n Fa: 4,\n Sol: 6,\n La: 8,\n Si: 10,\n Do: 11\n }\n }\n },\n [(0, $72b24102c7d826fd$export$4d318981b5a83836)]: {\n [(0, $72b24102c7d826fd$export$39615881bb0d21f6)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n 1: 0,\n 2: 2,\n 3: 4,\n 4: 5,\n 5: 7,\n 6: 9,\n 7: 11\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n 7: 0,\n 1: 1,\n 2: 3,\n 3: 5,\n 4: 6,\n 5: 8,\n 6: 10\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n 2: 1,\n 3: 3,\n 4: 4,\n 5: 6,\n 6: 8,\n 7: 10,\n 1: 11\n }\n },\n [(0, $72b24102c7d826fd$export$f23edc19d247fd25)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n 1: 0,\n 2: 2,\n 3: 3,\n 4: 5,\n 5: 7,\n 6: 8,\n 7: 10\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n 1: 1,\n 2: 3,\n 3: 4,\n 4: 6,\n 5: 8,\n 6: 9,\n 7: 11\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n 2: 1,\n 3: 2,\n 4: 4,\n 5: 6,\n 6: 7,\n 7: 9,\n 1: 11\n }\n }\n },\n [(0, $72b24102c7d826fd$export$1321df9b16c30c6a)]: {\n [(0, $72b24102c7d826fd$export$39615881bb0d21f6)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n I: 0,\n II: 2,\n III: 4,\n IV: 5,\n V: 7,\n VI: 9,\n VII: 11\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n VII: 0,\n I: 1,\n II: 3,\n III: 5,\n IV: 6,\n V: 8,\n VI: 10\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n II: 1,\n III: 3,\n IV: 4,\n V: 6,\n VI: 8,\n VII: 10,\n I: 11\n }\n },\n [(0, $72b24102c7d826fd$export$f23edc19d247fd25)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n I: 0,\n II: 2,\n III: 3,\n IV: 5,\n V: 7,\n VI: 8,\n VII: 10\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n I: 1,\n II: 3,\n III: 4,\n IV: 6,\n V: 8,\n VI: 9,\n VII: 11\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n II: 1,\n III: 2,\n IV: 4,\n V: 6,\n VI: 7,\n VII: 9,\n I: 11\n }\n }\n }\n};\nconst $0cb401ed3f1d0550$export$40141681ebb03523 = {\n [(0, $72b24102c7d826fd$export$27c95a7104c1f7aa)]: {\n [(0, $72b24102c7d826fd$export$39615881bb0d21f6)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n 0: 'C',\n 2: 'D',\n 4: 'E',\n 5: 'F',\n 7: 'G',\n 9: 'A',\n 11: 'B'\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n 0: 'B#',\n 1: 'C#',\n 3: 'D#',\n 5: 'E#',\n 6: 'F#',\n 8: 'G#',\n 10: 'A#'\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n 1: 'Db',\n 3: 'Eb',\n 4: 'Fb',\n 6: 'Gb',\n 8: 'Ab',\n 10: 'Bb',\n 11: 'Cb'\n }\n },\n [(0, $72b24102c7d826fd$export$f23edc19d247fd25)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n 0: 'C',\n 2: 'D',\n 4: 'E',\n 5: 'F',\n 7: 'G',\n 9: 'A',\n 11: 'B'\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n 0: 'B#',\n 1: 'C#',\n 3: 'D#',\n 5: 'E#',\n 6: 'F#',\n 8: 'G#',\n 10: 'A#'\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n 1: 'Db',\n 3: 'Eb',\n 4: 'Fb',\n 6: 'Gb',\n 8: 'Ab',\n 10: 'Bb',\n 11: 'Cb'\n }\n }\n },\n [(0, $72b24102c7d826fd$export$539a6499f4711c57)]: {\n [(0, $72b24102c7d826fd$export$39615881bb0d21f6)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n 0: 'Do',\n 2: 'Re',\n 4: 'Mi',\n 5: 'Fa',\n 7: 'Sol',\n 9: 'La',\n 11: 'Si'\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n 0: 'Si#',\n 1: 'Do#',\n 3: 'Re#',\n 5: 'Mi#',\n 6: 'Fa#',\n 8: 'Sol#',\n 10: 'La#'\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n 1: 'Reb',\n 3: 'Mib',\n 4: 'Fab',\n 6: 'Solb',\n 8: 'Lab',\n 10: 'Sib',\n 11: 'Dob'\n }\n },\n [(0, $72b24102c7d826fd$export$f23edc19d247fd25)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n 0: 'Do',\n 2: 'Re',\n 4: 'Mi',\n 5: 'Fa',\n 7: 'Sol',\n 9: 'La',\n 11: 'Si'\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n 0: 'Si#',\n 1: 'Do#',\n 3: 'Re#',\n 5: 'Mi#',\n 6: 'Fa#',\n 8: 'Sol#',\n 10: 'La#'\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n 1: 'Reb',\n 3: 'Mib',\n 4: 'Fab',\n 6: 'Solb',\n 8: 'Lab',\n 10: 'Sib',\n 11: 'Dob'\n }\n }\n },\n [(0, $72b24102c7d826fd$export$4d318981b5a83836)]: {\n [(0, $72b24102c7d826fd$export$39615881bb0d21f6)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n 0: '1',\n 2: '2',\n 4: '3',\n 5: '4',\n 7: '5',\n 9: '6',\n 11: '7'\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n 0: '#7',\n 1: '#1',\n 3: '#2',\n 5: '#3',\n 6: '#4',\n 8: '#5',\n 10: '#6'\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n 1: 'b2',\n 3: 'b3',\n 4: 'b4',\n 6: 'b5',\n 8: 'b6',\n 10: 'b7',\n 11: 'b1'\n }\n },\n [(0, $72b24102c7d826fd$export$f23edc19d247fd25)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n 0: '1',\n 2: '2',\n 3: '3',\n 5: '4',\n 7: '5',\n 8: '6',\n 10: '7'\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n 1: '#1',\n 3: '#2',\n 4: '#3',\n 6: '#4',\n 8: '#5',\n 9: '#6',\n 11: '#7'\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n 1: 'b2',\n 2: 'b3',\n 4: 'b4',\n 6: 'b5',\n 7: 'b6',\n 9: 'b7',\n 11: 'b1'\n }\n }\n },\n [(0, $72b24102c7d826fd$export$1321df9b16c30c6a)]: {\n [(0, $72b24102c7d826fd$export$39615881bb0d21f6)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n 0: 'I',\n 2: 'II',\n 4: 'III',\n 5: 'IV',\n 7: 'V',\n 9: 'VI',\n 11: 'VII'\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n 0: '#VII',\n 1: '#I',\n 3: '#II',\n 5: '#III',\n 6: '#IV',\n 8: '#V',\n 10: '#VI'\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n 1: 'bII',\n 3: 'bIII',\n 4: 'bIV',\n 6: 'bV',\n 8: 'bVI',\n 10: 'bVII',\n 11: 'bI'\n }\n },\n [(0, $72b24102c7d826fd$export$f23edc19d247fd25)]: {\n [(0, $72b24102c7d826fd$export$f0f7b592ea674eb2)]: {\n 0: 'I',\n 2: 'II',\n 3: 'III',\n 5: 'IV',\n 7: 'V',\n 8: 'VI',\n 10: 'VII'\n },\n [(0, $72b24102c7d826fd$export$f5b1d6b4244c9536)]: {\n 1: '#I',\n 3: '#II',\n 4: '#III',\n 6: '#IV',\n 8: '#V',\n 9: '#VI',\n 11: '#VII'\n },\n [(0, $72b24102c7d826fd$export$1ea14522906630af)]: {\n 1: 'bII',\n 2: 'bIII',\n 4: 'bIV',\n 6: 'bV',\n 7: 'bVI',\n 9: 'bVII',\n 11: 'bI'\n }\n }\n }\n};\n\n\nconst $23642067c1e64fd7$var$enharmonics = {\n 'Ab': {\n 'B': 'Cb'\n },\n 'Cb': {\n 'B': 'Cb',\n 'A#': 'Bb',\n 'E': 'Fb'\n },\n 'C': {\n 'C#': 'Db',\n 'D#': 'Eb',\n 'F#': 'Gb',\n 'G#': 'Ab',\n 'A#': 'Bb'\n },\n 'C#': {\n 'Eb': 'D#',\n 'Bb': 'A#'\n },\n 'Db': {\n 'Cb': 'B',\n 'F#': 'Gb',\n 'G#': 'Ab',\n 'A#': 'Bb'\n },\n 'D': {\n 'D#': 'Eb',\n 'A#': 'Bb',\n 'Gb': 'F#'\n },\n 'Eb': {\n 'D#': 'Eb',\n 'F#': 'Gb',\n 'G#': 'Ab',\n 'A#': 'Bb'\n },\n 'E': {\n 'Ab': 'G#',\n 'A#': 'Bb',\n 'D#': 'Eb',\n 'Db': 'C#',\n 'Eb': 'D#'\n },\n 'F': {\n 'A#': 'Bb',\n 'F#': 'Gb',\n 'D#': 'Eb',\n 'G#': 'Ab'\n },\n 'F#': {\n 'Bb': 'A#',\n 'Eb': 'D#'\n },\n 'Gb': {\n 'A#': 'Bb',\n 'D#': 'Eb',\n 'G#': 'Ab',\n 'B': 'Cb',\n 'E': 'Fb'\n },\n 'G': {\n 'A#': 'Bb',\n 'D#': 'Eb',\n 'G#': 'Ab',\n 'C#': 'Db'\n },\n 'G#': {\n 'A#': 'Bb',\n 'D#': 'Eb',\n 'Cb': 'B#'\n },\n 'Am': {\n 'G#': 'Ab',\n 'F#': 'Gb',\n 'C#': 'Db',\n 'D#': 'Eb',\n 'A#': 'Bb'\n },\n 'Bbm': {\n 'Cb': 'B',\n 'Gb': 'F#'\n },\n 'Bm': {\n 'A#': 'Bb',\n 'D#': 'Eb'\n },\n 'C#m': {\n 'A#': 'Bb',\n 'D#': 'Eb',\n 'Gb': 'F#'\n },\n 'Cm': {\n 'G#': 'Ab',\n 'A#': 'Bb',\n 'D#': 'Eb',\n 'F#': 'Gb',\n 'C#': 'Db'\n },\n 'Dm': {\n 'A#': 'Bb',\n 'D#': 'Eb',\n 'F#': 'Gb',\n 'G#': 'Ab',\n 'C#': 'Db'\n },\n 'Em': {\n 'A#': 'Bb',\n 'D#': 'Eb',\n 'C#': 'Db'\n },\n 'F#m': {\n 'A#': 'Bb',\n 'D#': 'Eb',\n 'Gb': 'F#',\n 'Ab': 'G#',\n 'Db': 'C#'\n },\n 'Fm': {\n 'G#': 'Ab',\n 'A#': 'Bb',\n 'D#': 'Eb',\n 'F#': 'Gb',\n 'C#': 'Db'\n },\n 'Gm': {\n 'G#': 'Ab',\n 'A#': 'Bb',\n 'D#': 'Eb',\n 'C#': 'Db',\n 'F#': 'Gb'\n },\n 'G#m': {\n 'Bb': 'A#',\n 'Eb': 'D#'\n },\n 'B': {\n 'Eb': 'D#'\n },\n 'Lab': {\n 'Si': 'Dob'\n },\n 'Dob': {\n 'Si': 'Dob',\n 'La#': 'Sib',\n 'Mi': 'Fab'\n },\n 'Do': {\n 'Do#': 'Reb',\n 'Re#': 'Mib',\n 'Fa#': 'Solb',\n 'Sol#': 'Lab',\n 'La#': 'Sib'\n },\n 'Do#': {\n 'Mib': 'Re#',\n 'Sib': 'La#'\n },\n 'Reb': {\n 'Si': 'Dob',\n 'Fa#': 'Solb'\n },\n 'Re': {\n 'Re#': 'Mib',\n 'La#': 'Sib',\n 'Solb': 'Fa#'\n },\n 'Mib': {\n 'Re#': 'Mib',\n 'Fa#': 'Solb',\n 'Sol#': 'Lab',\n 'La#': 'Sib'\n },\n 'Mi': {\n 'Lab': 'Sol#',\n 'La#': 'Sib',\n 'Re#': 'Mib',\n 'Reb': 'Do#',\n 'Mib': 'Re#'\n },\n 'Fa': {\n 'La#': 'Sib',\n 'Fa#': 'Solb',\n 'Re#': 'Mib',\n 'Sol#': 'Lab'\n },\n 'Fa#': {\n 'Sib': 'La#',\n 'Mib': 'Re#'\n },\n 'Solb': {\n 'La#': 'Sib',\n 'Re#': 'Mib',\n 'Sol#': 'Lab',\n 'Si': 'Dob',\n 'Mi': 'Fab'\n },\n 'Sol': {\n 'La#': 'Sib',\n 'Re#': 'Mib',\n 'Sol#': 'Lab',\n 'Do#': 'Reb'\n },\n 'Sol#': {\n 'La#': 'Sib',\n 'Re#': 'Mib',\n 'Dob': 'Si#'\n },\n 'Lam': {\n 'Sol#': 'Lab',\n 'Fa#': 'Solb',\n 'Do#': 'Reb',\n 'Re#': 'Mib',\n 'La#': 'Sib'\n },\n 'Sibm': {\n 'Dob': 'Si',\n 'Solb': 'Fa#'\n },\n 'Sim': {\n 'La#': 'Sib',\n 'Re#': 'Mib'\n },\n 'Do#m': {\n 'La#': 'Sib',\n 'Re#': 'Mib',\n 'Solb': 'Fa#'\n },\n 'Dom': {\n 'Sol#': 'Lab',\n 'La#': 'Sib',\n 'Re#': 'Mib',\n 'Fa#': 'Solb',\n 'Do#': 'Reb'\n },\n 'Rem': {\n 'La#': 'Sib',\n 'Re#': 'Mib',\n 'Fa#': 'Solb',\n 'Sol#': 'Lab',\n 'Do#': 'Reb'\n },\n 'Mim': {\n 'La#': 'Sib',\n 'Re#': 'Mib',\n 'Do#': 'Reb'\n },\n 'Fa#m': {\n 'La#': 'Sib',\n 'Re#': 'Mib',\n 'Solb': 'Fa#',\n 'Lab': 'Sol#',\n 'Reb': 'Do#'\n },\n 'Fam': {\n 'Sol#': 'Lab',\n 'La#': 'Sib',\n 'Re#': 'Mib',\n 'Fa#': 'Solb',\n 'Do#': 'Reb'\n },\n 'Solm': {\n 'Sol#': 'Lab',\n 'La#': 'Sib',\n 'Re#': 'Mib',\n 'Do#': 'Reb',\n 'Fa#': 'Solb'\n },\n 'Sol#m': {\n 'Sib': 'La#',\n 'Mib': 'Re#'\n },\n 'Si': {\n 'Mib': 'Re#'\n }\n};\nvar $23642067c1e64fd7$export$2e2bcd8739ae039 = $23642067c1e64fd7$var$enharmonics;\n\n\n\n/**\n * Represents a chord with the corresponding (partial) lyrics\n */ class $0d04ced54ebef610$var$ChordLyricsPair {\n /**\n * Initialises a ChordLyricsPair\n * @param {string} chords The chords\n * @param {string | null} lyrics The lyrics\n * @param {string | null} annotation The annotation\n */ constructor(chords = '', lyrics = null, annotation = null){\n /**\n * The chords\n * @member\n * @type {string}\n */ this.chords = chords || '';\n /**\n * The lyrics\n * @member\n * @type {string}\n */ this.lyrics = lyrics || '';\n /**\n * The annotation\n * @member\n * @type {string}\n */ this.annotation = annotation || '';\n }\n /**\n * Indicates whether a ChordLyricsPair should be visible in a formatted chord sheet (except for ChordPro sheets)\n * @returns {boolean}\n */ isRenderable() {\n return true;\n }\n /**\n * Returns a deep copy of the ChordLyricsPair, useful when programmatically transforming a song\n * @returns {ChordLyricsPair}\n */ clone() {\n return new $0d04ced54ebef610$var$ChordLyricsPair(this.chords, this.lyrics, this.annotation);\n }\n toString() {\n return `ChordLyricsPair(chords=${this.chords}, lyrics=${this.lyrics})`;\n }\n set({ chords: chords, lyrics: lyrics, annotation: annotation }) {\n return new $0d04ced54ebef610$var$ChordLyricsPair(chords || this.chords, lyrics || this.lyrics, annotation || this.annotation);\n }\n setLyrics(lyrics) {\n return this.set({\n lyrics: lyrics\n });\n }\n setAnnotation(annotation) {\n return this.set({\n annotation: annotation\n });\n }\n transpose(delta, key = null, { normalizeChordSuffix: normalizeChordSuffix } = {\n normalizeChordSuffix: false\n }) {\n return this.changeChord((chord)=>{\n const transposedChord = chord.transpose(delta);\n if (key) return transposedChord.normalize(key, {\n normalizeSuffix: normalizeChordSuffix\n });\n return transposedChord;\n });\n }\n useModifier(modifier) {\n return this.changeChord((chord)=>chord.useModifier(modifier));\n }\n changeChord(func) {\n const chordObj = (0, $f0449e2486cb2372$export$2e2bcd8739ae039).parse(this.chords.trim());\n if (chordObj) {\n const changedChord = func(chordObj);\n return this.set({\n chords: changedChord.toString()\n });\n }\n return this.clone();\n }\n}\nvar $0d04ced54ebef610$export$2e2bcd8739ae039 = $0d04ced54ebef610$var$ChordLyricsPair;\n\n\n\nconst $d643910899695a08$var$mapping = {\n \"2\": \"2\",\n \"4\": \"sus\",\n \"5\": \"5\",\n \"6\": \"6\",\n \"7\": \"7\",\n \"9\": \"9\",\n \"11\": \"11\",\n \"13\": \"13\",\n \"42\": \"4(2)\",\n \"69\": \"6(9)\",\n \"(#4)\": \"(#4)\",\n \"#4\": \"(#4)\",\n \"+4\": \"(#4)\",\n \"(+4)\": \"(#4)\",\n \"(11)\": \"(11)\",\n \"add11\": \"(11)\",\n \"(add11)\": \"(11)\",\n \"(13)\": \"(13)\",\n \"add13\": \"(13)\",\n \"(add13)\": \"(13)\",\n \"(2)\": \"(2)\",\n \"add2\": \"(2)\",\n \"(add2)\": \"(2)\",\n \"(4)\": \"(4)\",\n \"add4\": \"(4)\",\n \"(add4)\": \"(4)\",\n \"sus(4)\": \"(4)\",\n \"(6)\": \"(6)\",\n \"add6\": \"(6)\",\n \"(add6)\": \"(6)\",\n \"(7)\": \"(7)\",\n \"(9)\": \"(9)\",\n \"add9\": \"(9)\",\n \"(add9)\": \"(9)\",\n \"(b5)\": \"(b5)\",\n \"-5\": \"(b5)\",\n \"(-5)\": \"(b5)\",\n \"b5\": \"(b5)\",\n \"2(6)\": \"2(6)\",\n \"(b6)\": \"(b6)\",\n \"(unis)\": \"(unis)\",\n \"unis\": \"(unis)\",\n \"[blank]\": \"[blank]\",\n \"maj\": \"[blank]\",\n \"major\": \"[blank]\",\n \"M\": \"[blank]\",\n \"ma\": \"[blank]\",\n \"Ma\": \"[blank]\",\n \"Majj\": \"[blank]\",\n \"+\": \"+\",\n \"aug\": \"+\",\n \"(#5)\": \"+\",\n \"#5\": \"+\",\n \"+5\": \"+\",\n \"(+5)\": \"+\",\n \"x\": \"+\",\n \"dom11\": \"11\",\n \"11(#5)\": \"11(#5)\",\n \"11#5\": \"11(#5)\",\n \"11+5\": \"11(#5)\",\n \"11(+5)\": \"11(#5)\",\n \"11(#9)\": \"11(#9)\",\n \"11#9\": \"11(#9)\",\n \"11+9\": \"11(#9)\",\n \"11(+9)\": \"11(#9)\",\n \"11(b13)\": \"11(b13)\",\n \"11b13\": \"11(b13)\",\n \"11-13\": \"11(b13)\",\n \"11(-13)\": \"11(b13)\",\n \"11(b5)\": \"11(b5)\",\n \"11b5\": \"11(b5)\",\n \"11-5\": \"11(b5)\",\n \"11(-5)\": \"11(b5)\",\n \"11(b9)\": \"11(b9)\",\n \"11b9\": \"11(b9)\",\n \"11-9\": \"11(b9)\",\n \"11(-9)\": \"11(b9)\",\n \"11sus4\": \"11sus4\",\n \"11sus\": \"11sus4\",\n \"m11sus4\": \"11sus4\",\n \"m11sus\": \"11sus4\",\n \"dom13\": \"13\",\n \"13(#11)\": \"13(#11)\",\n \"13#11\": \"13(#11)\",\n \"13+11\": \"13(#11)\",\n \"13(+11)\": \"13(#11)\",\n \"13(#5)\": \"13(#5)\",\n \"13#5\": \"13(#5)\",\n \"13+5\": \"13(#5)\",\n \"13(+5)\": \"13(#5)\",\n \"13(#9)\": \"13(#9)\",\n \"13#9\": \"13(#9)\",\n \"13(+9)\": \"13(#9)\",\n \"13+9\": \"13(#9)\",\n \"13(#9#5)\": \"13(#9#5)\",\n \"13#9#5\": \"13(#9#5)\",\n \"13(+9+5)\": \"13(#9#5)\",\n \"13+9+5\": \"13(#9#5)\",\n \"13(#9b5)\": \"13(#9b5)\",\n \"13#9b5\": \"13(#9b5)\",\n \"13(+9-5)\": \"13(#9b5)\",\n \"13+9-5\": \"13(#9b5)\",\n \"13(add2)\": \"13(add2)\",\n \"13(add4)\": \"13(add4)\",\n \"13(b5)\": \"13(b5)\",\n \"13b5\": \"13(b5)\",\n \"13-5\": \"13(b5)\",\n \"13(-5)\": \"13(b5)\",\n \"13(b9)\": \"13(b9)\",\n \"13b9\": \"13(b9)\",\n \"13-9\": \"13(b9)\",\n \"13(-9)\": \"13(b9)\",\n \"13(b9#5)\": \"13(b9#5)\",\n \"13b9#5\": \"13(b9#5)\",\n \"13-9+5\": \"13(b9#5)\",\n \"13(-9+5)\": \"13(b9#5)\",\n \"13(b9b5)\": \"13(b9b5)\",\n \"13b9b5\": \"13(b9b5)\",\n \"13-9-5\": \"13(b9b5)\",\n \"13(-9-5)\": \"13(b9b5)\",\n \"13sus4\": \"13sus4\",\n \"13sus\": \"13sus4\",\n \"m13sus4\": \"13sus4\",\n \"m13sus\": \"13sus4\",\n \"sus2\": \"2\",\n \"add9(no3)\": \"2\",\n \"2(#11)\": \"2(#11)\",\n \"2(#4)\": \"2(#4)\",\n \"2+4\": \"2(#4)\",\n \"2#4\": \"2(#4)\",\n \"2(+4)\": \"2(#4)\",\n \"(#4)2\": \"2(#4)\",\n \"2(#4)(#42)(2#4)\": \"2(#4)(#42)(2#4)\",\n \"2(+7)\": \"2(+7)\",\n \"2(4)\": \"2(4)\",\n \"sus2(4)\": \"2(4)\",\n \"2(ma7)\": \"2(ma7)\",\n \"2(no3)\": \"2(no3)\",\n \"4(2)\": \"4(2)\",\n \"sus42\": \"4(2)\",\n \"no3\": \"5\",\n \"(no3)\": \"5\",\n \"5(no3)\": \"5\",\n \"6(2)\": \"6(2)\",\n \"6(b9)\": \"6(b9)\",\n \"6(no3)\": \"6(no3)\",\n \"6(9)\": \"6(9)\",\n \"6(add9)\": \"6(9)\",\n \"dom7\": \"7\",\n \"7(#11)\": \"7(#11)\",\n \"7#11\": \"7(#11)\",\n \"7+11\": \"7(#11)\",\n \"7(+11)\": \"7(#11)\",\n \"7(#5)\": \"7(#5)\",\n \"aug7\": \"7(#5)\",\n \"7#5\": \"7(#5)\",\n \"7+5\": \"7(#5)\",\n \"7(+5)\": \"7(#5)\",\n \"x7\": \"7(#5)\",\n \"7(#5#11)\": \"7(#5#11)\",\n \"7#5#11\": \"7(#5#11)\",\n \"7+5+11\": \"7(#5#11)\",\n \"7(+5+11)\": \"7(#5#11)\",\n \"7(#9)\": \"7(#9)\",\n \"7#9\": \"7(#9)\",\n \"7+9\": \"7(#9)\",\n \"7(+9)\": \"7(#9)\",\n \"7(#9#5)\": \"7(#9#5)\",\n \"7(#5#9)\": \"7(#9#5)\",\n \"7#5#9\": \"7(#9#5)\",\n \"7+5+9\": \"7(#9#5)\",\n \"7(+5+9)\": \"7(#9#5)\",\n \"7(#9b13)\": \"7(#9b13)\",\n \"7#9b13\": \"7(#9b13)\",\n \"7(+9-13)\": \"7(#9b13)\",\n \"7+9-13\": \"7(#9b13)\",\n \"7(b13#9)\": \"7(#9b13)\",\n \"7b13#9\": \"7(#9b13)\",\n \"7-13+9\": \"7(#9b13)\",\n \"7(-13+9)\": \"7(#9b13)\",\n \"7(#9b5)\": \"7(#9b5)\",\n \"7(6)\": \"7(6)\",\n \"7(b13)\": \"7(b13)\",\n \"7b13\": \"7(b13)\",\n \"7-13\": \"7(b13)\",\n \"7(-13)\": \"7(b13)\",\n \"7(b5)\": \"7(b5)\",\n \"7b5\": \"7(b5)\",\n \"7-5\": \"7(b5)\",\n \"7(-5)\": \"7(b5)\",\n \"7(b5#11)\": \"7(b5#11)\",\n \"7b5#11\": \"7(b5#11)\",\n \"7-5+11\": \"7(b5#11)\",\n \"7(-5+11)\": \"7(b5#11)\",\n \"7(b5#9)\": \"7(b5#9)\",\n \"7b5#9\": \"7(b5#9)\",\n \"7-5+9\": \"7(b5#9)\",\n \"7(-5+9)\": \"7(b5#9)\",\n \"7(b5b9)\": \"7(b5b9)\",\n \"7b5b9\": \"7(b5b9)\",\n \"7-5-9\": \"7(b5b9)\",\n \"7(-5-9)\": \"7(b5b9)\",\n \"7(b9)\": \"7(b9)\",\n \"7b9\": \"7(b9)\",\n \"7-9\": \"7(b9)\",\n \"7(-9)\": \"7(b9)\",\n \"7(b9#5)\": \"7(b9#5)\",\n \"7(#5b9)\": \"7(b9#5)\",\n \"7#5b9\": \"7(b9#5)\",\n \"7+5-9\": \"7(b9#5)\",\n \"7(+5-9)\": \"7(b9#5)\",\n \"7(b9b13)\": \"7(b9b13)\",\n \"7b9b13\": \"7(b9b13)\",\n \"7-9-13\": \"7(b9b13)\",\n \"7(-9-13)\": \"7(b9b13)\",\n \"7(b13b9)\": \"7(b9b13)\",\n \"7b13b9\": \"7(b9b13)\",\n \"7-13-9\": \"7(b9b13)\",\n \"7(-13-9)\": \"7(b9b13)\",\n \"7(b9b5)\": \"7(b9b5)\",\n \"7(no3)\": \"7(no3)\",\n \"7aug5\": \"7aug5\",\n \"7b9sus4\": \"7b9sus4\",\n \"7sus(6)\": \"7sus(6)\",\n \"7sus(b9)\": \"7sus(b9)\",\n \"7sus4\": \"7sus4\",\n \"7sus\": \"7sus4\",\n \"dom9\": \"9\",\n \"9(#11)\": \"9(#11)\",\n \"9#11\": \"9(#11)\",\n \"9+11\": \"9(#11)\",\n \"9(+11)\": \"9(#11)\",\n \"9(#5)\": \"9(#5)\",\n \"9#5\": \"9(#5)\",\n \"9+5\": \"9(#5)\",\n \"9(+5)\": \"9(#5)\",\n \"aug9\": \"9(#5)\",\n \"x9\": \"9(#5)\",\n \"9(b13)\": \"9(b13)\",\n \"9b13\": \"9(b13)\",\n \"9-13\": \"9(b13)\",\n \"9(-13)\": \"9(b13)\",\n \"9(b5)\": \"9(b5)\",\n \"9b5\": \"9(b5)\",\n \"9-5\": \"9(b5)\",\n \"9(-5)\": \"9(b5)\",\n \"9aug\": \"9aug\",\n \"9sus4\": \"9sus4\",\n \"9sus\": \"9sus4\",\n \"m9sus4\": \"9sus4\",\n \"m9sus\": \"9sus4\",\n \"b69(#11)\": \"b69(#11)\",\n \"b69sus\": \"b69sus\",\n \"b9sus\": \"b9sus\",\n \"dim\": \"dim\",\n \"m(b5)\": \"dim\",\n \"mb5\": \"dim\",\n \"m-5\": \"dim\",\n \"m(-5)\": \"dim\",\n \"-(b5)\": \"dim\",\n \"-b5\": \"dim\",\n \"dim7\": \"dim7\",\n \"o7\": \"dim7\",\n \"m\": \"m\",\n \"mi\": \"m\",\n \"min\": \"m\",\n \"minor\": \"m\",\n \"-\": \"m\",\n \"m(11)\": \"m(11)\",\n \"m(add11)\": \"m(11)\",\n \"m(4)\": \"m(4)\",\n \"m(add4)\": \"m(4)\",\n \"m(9)\": \"m(9)\",\n \"m(add9)\": \"m(9)\",\n \"m(ma7)\": \"m(ma7)\",\n \"m(M7)\": \"m(ma7)\",\n \"mi(maj7)\": \"m(ma7)\",\n \"min(maj7)\": \"m(ma7)\",\n \"m(maj7)\": \"m(ma7)\",\n \"m(+7)\": \"m(ma7)\",\n \"m+7\": \"m(ma7)\",\n \"m(ma9)\": \"m(ma9)\",\n \"m(M9)\": \"m(ma9)\",\n \"mi(maj9)\": \"m(ma9)\",\n \"min(maj9)\": \"m(ma9)\",\n \"m(maj9)\": \"m(ma9)\",\n \"m(+9)\": \"m(ma9)\",\n \"m+9\": \"m(ma9)\",\n \"m(no5)\": \"m(no5)\",\n \"m11\": \"m11\",\n \"mi11\": \"m11\",\n \"min11\": \"m11\",\n \"-11\": \"m11\",\n \"m11(#5)\": \"m11(#5)\",\n \"m11#5\": \"m11(#5)\",\n \"m11+5\": \"m11(#5)\",\n \"m11(+5)\": \"m11(#5)\",\n \"-11(#5)\": \"m11(#5)\",\n \"-11#5\": \"m11(#5)\",\n \"m9+5\": \"m9(#5)\",\n \"-11(+5)\": \"m11(#5)\",\n \"m11(#9)\": \"m11(#9)\",\n \"m11#9\": \"m11(#9)\",\n \"m11+9\": \"m11(#9)\",\n \"m11(+9)\": \"m11(#9)\",\n \"-11(#9)\": \"m11(#9)\",\n \"-11#9\": \"m11(#9)\",\n \"-11+9\": \"m11(#9)\",\n \"-11(+9)\": \"m11(#9)\",\n \"m11(#9#5)\": \"m11(#9#5)\",\n \"m11(#5#9)\": \"m11(#9#5)\",\n \"m11#5#9\": \"m11(#9#5)\",\n \"m11+5+9\": \"m11(#9#5)\",\n \"m11(+5+9)\": \"m11(#9#5)\",\n \"-11(#5#9)\": \"m11(#9#5)\",\n \"-11#5#9\": \"m11(#9#5)\",\n \"m9+5+9\": \"m11(#9#5)\",\n \"-11(+5+9)\": \"m11(#9#5)\",\n \"m11(#9b13)\": \"m11(#9b13)\",\n \"m11#9b13\": \"m11(#9b13)\",\n \"m11+9-13\": \"m11(#9b13)\",\n \"m11(+9-13)\": \"m11(#9b13)\",\n \"-11(#9b13)\": \"m11(#9b13)\",\n \"-11#9b13\": \"m11(#9b13)\",\n \"-11+9-13\": \"m11(#9b13)\",\n \"-11(+9-13)\": \"m11(#9b13)\",\n \"m11(b13)\": \"m11(b13)\",\n \"m11b13\": \"m11(b13)\",\n \"m11-13\": \"m11(b13)\",\n \"m11(-13)\": \"m11(b13)\",\n \"-11(b13)\": \"m11(b13)\",\n \"-11b13\": \"m11(b13)\",\n \"-11-13\": \"m11(b13)\",\n \"-11(-13)\": \"m11(b13)\",\n \"m11(b13#5)\": \"m11(b13#5)\",\n \"m11(#5b13)\": \"m11(b13#5)\",\n \"m11#5b13\": \"m11(b13#5)\",\n \"m11+5-13\": \"m11(b13#5)\",\n \"m11(+5-13)\": \"m11(b13#5)\",\n \"-11(#5b13)\": \"m11(b13#5)\",\n \"-11#5b13\": \"m11(b13#5)\",\n \"-11+5-13\": \"m11(b13#5)\",\n \"-11(+5-13)\": \"m11(b13#5)\",\n \"m11(b5)\": \"m11(b5)\",\n \"m11b5\": \"m11(b5)\",\n \"m11-5\": \"m11(b5)\",\n \"m11(-5)\": \"m11(b5)\",\n \"-11(b5)\": \"m11(b5)\",\n \"-11b5\": \"m11(b5)\",\n \"-9-5\": \"m9(b5)\",\n \"-11(-5)\": \"m11(b5)\",\n \"m11(b5#9)\": \"m11(b5#9)\",\n \"m11b5#9\": \"m11(b5#9)\",\n \"m11-5+9\": \"m11(b5#9)\",\n \"m11(-5+9)\": \"m11(b5#9)\",\n \"-11(b5#9)\": \"m11(b5#9)\",\n \"-11b5#9\": \"m11(b5#9)\",\n \"-11-5+9\": \"m11(b5#9)\",\n \"-11(-5+9)\": \"m11(b5#9)\",\n \"m11(b5b13)\": \"m11(b5b13)\",\n \"m11b5b13\": \"m11(b5b13)\",\n \"m11(-5-13)\": \"m11(b5b13)\",\n \"m11-5-13\": \"m11(b5b13)\",\n \"-11(b5b13)\": \"m11(b5b13)\",\n \"-11b5b13\": \"m11(b5b13)\",\n \"-11(-5-13)\": \"m11(b5b13)\",\n \"-11-5-13\": \"m11(b5b13)\",\n \"m11(b5b9)\": \"m11(b5b9)\",\n \"m11b5b9\": \"m11(b5b9)\",\n \"m11-5-9\": \"m11(b5b9)\",\n \"m11(-5-9)\": \"m11(b5b9)\",\n \"-11(b5b9)\": \"m11(b5b9)\",\n \"-11b5b9\": \"m11(b5b9)\",\n \"-11-5-9\": \"m11(b5b9)\",\n \"-11(-5-9)\": \"m11(b5b9)\",\n \"m11(b9)\": \"m11(b9)\",\n \"m11b9\": \"m11(b9)\",\n \"m11(-9)\": \"m11(b9)\",\n \"m11-9\": \"m11(b9)\",\n \"-11(b9)\": \"m11(b9)\",\n \"-11b9\": \"m11(b9)\",\n \"-11(-9)\": \"m11(b9)\",\n \"-11-9\": \"m11(b9)\",\n \"m11(b9#5)\": \"m11(b9#5)\",\n \"m11(#5b9)\": \"m11(b9#5)\",\n \"m11#5b9\": \"m11(b9#5)\",\n \"m11+5-9\": \"m11(b9#5)\",\n \"m11(+5-9)\": \"m11(b9#5)\",\n \"-11(#5b9)\": \"m11(b9#5)\",\n \"-11#5b9\": \"m11(b9#5)\",\n \"m9+5-9\": \"m11(b9#5)\",\n \"-11(+5-9)\": \"m11(b9#5)\",\n \"m11(b9b13)\": \"m11(b9b13)\",\n \"m11b9b13\": \"m11(b9b13)\",\n \"m11(-9-13)\": \"m11(b9b13)\",\n \"m11-9-13\": \"m11(b9b13)\",\n \"-11(b9b13)\": \"m11(b9b13)\",\n \"-11b9b13\": \"m11(b9b13)\",\n \"-11(-9-13)\": \"m11(b9b13)\",\n \"-11-9-13\": \"m11(b9b13)\",\n \"m13\": \"m13\",\n \"mi13\": \"m13\",\n \"min13\": \"m13\",\n \"-13\": \"m13\",\n \"m13(#11)\": \"m13(#11)\",\n \"m13#11\": \"m13(#11)\",\n \"m13+11\": \"m13(#11)\",\n \"m13(+11)\": \"m13(#11)\",\n \"-13(#11)\": \"m13(#11)\",\n \"-13#11\": \"m13(#11)\",\n \"-13+11\": \"m13(#11)\",\n \"-13(+11)\": \"m13(#11)\",\n \"m13(#5)\": \"m13(#5)\",\n \"m13#5\": \"m13(#5)\",\n \"m13+5\": \"m13(#5)\",\n \"m13(+5)\": \"m13(#5)\",\n \"-13(#5)\": \"m13(#5)\",\n \"-13#5\": \"m13(#5)\",\n \"-13(+5)\": \"m13(#5)\",\n \"m13(#9)\": \"m13(#9)\",\n \"m13#9\": \"m13(#9)\",\n \"m13(+9)\": \"m13(#9)\",\n \"m13+9\": \"m13(#9)\",\n \"-13(#9)\": \"m13(#9)\",\n \"-13#9\": \"m13(#9)\",\n \"-13(+9)\": \"m13(#9)\",\n \"-13+9\": \"m13(#9)\",\n \"m13(b5)\": \"m13(b5)\",\n \"m13b5\": \"m13(b5)\",\n \"m13-5\": \"m13(b5)\",\n \"m13(-5)\": \"m13(b5)\",\n \"-13(b5)\": \"m13(b5)\",\n \"-13b5\": \"m13(b5)\",\n \"-13-5\": \"m13(b5)\",\n \"-13(-5)\": \"m13(b5)\",\n \"m13(b9)\": \"m13(b9)\",\n \"m13b9\": \"m13(b9)\",\n \"m13-9\": \"m13(b9)\",\n \"m13(-9)\": \"m13(b9)\",\n \"-13(b13)\": \"m13(b9)\",\n \"-13b13\": \"m13(b9)\",\n \"-13-13\": \"m13(b9)\",\n \"-13(-13)\": \"m13(b9)\",\n \"m2\": \"m2\",\n \"mi2\": \"m2\",\n \"min2\": \"m2\",\n \"m(add2)\": \"m2\",\n \"madd2\": \"m2\",\n \"m4\": \"m4\",\n \"m6\": \"m6\",\n \"mi6\": \"m6\",\n \"min6\": \"m6\",\n \"-6\": \"m6\",\n \"m6(#5)\": \"m6(#5)\",\n \"m6(9)\": \"m6(9)\",\n \"m6add9\": \"m6(9)\",\n \"m6(add9)\": \"m6(9)\",\n \"m69\": \"m6(9)\",\n \"m6(ma7)\": \"m6(ma7)\",\n \"m6(M7)\": \"m6(ma7)\",\n \"m6(+7)\": \"m6(ma7)\",\n \"m6M7\": \"m6(ma7)\",\n \"m6+7\": \"m6(ma7)\",\n \"m7\": \"m7\",\n \"mi7\": \"m7\",\n \"min7\": \"m7\",\n \"-7\": \"m7\",\n \"m7(#11)\": \"m7(#11)\",\n \"m7#11\": \"m7(#11)\",\n \"m7+11\": \"m7(#11)\",\n \"m7(+11)\": \"m7(#11)\",\n \"-7(#11)\": \"m7(#11)\",\n \"-7#11\": \"m7(#11)\",\n \"-7+11\": \"m7(#11)\",\n \"-7(+11)\": \"m7(#11)\",\n \"m7(#5)\": \"m7(#5)\",\n \"m7#5\": \"m7(#5)\",\n \"m7+5\": \"m7(#5)\",\n \"m7(+5)\": \"m7(#5)\",\n \"-7(#5)\": \"m7(#5)\",\n \"-7#5\": \"m7(#5)\",\n \"-7(+5)\": \"m7(#5)\",\n \"m7(#9)\": \"m7(#9)\",\n \"m7#9\": \"m7(#9)\",\n \"m7+9\": \"m7(#9)\",\n \"m7(+9)\": \"m7(#9)\",\n \"-7(#9)\": \"m7(#9)\",\n \"-7#9\": \"m7(#9)\",\n \"-7(+9)\": \"m7(#9)\",\n \"m7(11)\": \"m7(11)\",\n \"m7(4)\": \"m7(4)\",\n \"m7(add4)\": \"m7(4)\",\n \"m7(add11)\": \"m7(4)\",\n \"m74\": \"m7(4)\",\n \"m7(6)\": \"m7(6)\",\n \"m7(add6)\": \"m7(add6)\",\n \"m7(b13)\": \"m7(b13)\",\n \"m7b13\": \"m7(b13)\",\n \"m7-13\": \"m7(b13)\",\n \"m7(-13)\": \"m7(b13)\",\n \"-7(b13)\": \"m7(b13)\",\n \"-7b13\": \"m7(b13)\",\n \"-7-13\": \"m7(b13)\",\n \"-7(-13)\": \"m7(b13)\",\n \"m7(b5)\": \"m7(b5)\",\n \"m7b5\": \"m7(b5)\",\n \"m7-5\": \"m7(b5)\",\n \"m7(-5)\": \"m7(b5)\",\n \"-7(b5)\": \"m7(b5)\",\n \"-7b5\": \"m7(b5)\",\n \"-7(-5)\": \"m7(b5)\",\n \"m7(b9)\": \"m7(b9)\",\n \"m7b9\": \"m7(b9)\",\n \"m7-9\": \"m7(b9)\",\n \"m7(-9)\": \"m7(b9)\",\n \"-7(b9)\": \"m7(b9)\",\n \"-7b9\": \"m7(b9)\",\n \"-7(-9)\": \"m7(b9)\",\n \"m7(no3)\": \"m7(no3)\",\n \"min7(no3)\": \"m7(no3)\",\n \"m7sus4\": \"m7sus4\",\n \"m7sus\": \"m7sus4\",\n \"m9\": \"m9\",\n \"mi9\": \"m9\",\n \"min9\": \"m9\",\n \"-9\": \"m9\",\n \"m9(#11)\": \"m9(#11)\",\n \"m9#11\": \"m9(#11)\",\n \"m9+11\": \"m9(#11)\",\n \"m9(+11)\": \"m9(#11)\",\n \"-9(#11)\": \"m9(#11)\",\n \"-9#11\": \"m9(#11)\",\n \"-9+11\": \"m9(#11)\",\n \"-9(+11)\": \"m9(#11)\",\n \"m9(#5)\": \"m9(#5)\",\n \"m9#5\": \"m9(#5)\",\n \"m9(+5)\": \"m9(#5)\",\n \"-9(#5)\": \"m9(#5)\",\n \"-9#5\": \"m9(#5)\",\n \"-9(+5)\": \"m9(#5)\",\n \"m9(#7)\": \"m9(#7)\",\n \"m9(b13)\": \"m9(b13)\",\n \"m9b13\": \"m9(b13)\",\n \"m9-13\": \"m9(b13)\",\n \"m9(-13)\": \"m9(b13)\",\n \"-9(b13)\": \"m9(b13)\",\n \"-9b13\": \"m9(b13)\",\n \"-9-13\": \"m9(b13)\",\n \"-9(-13)\": \"m9(b13)\",\n \"m9(b5)\": \"m9(b5)\",\n \"m9b5\": \"m9(b5)\",\n \"m9-5\": \"m9(b5)\",\n \"m9(-5)\": \"m9(b5)\",\n \"-9(b5)\": \"m9(b5)\",\n \"-9b5\": \"m9(b5)\",\n \"-9(-5)\": \"m9(b5)\",\n \"m9(ma7)\": \"m9(ma7)\",\n \"m9(maj7)\": \"m9(ma7)\",\n \"m9(+7)\": \"m9(ma7)\",\n \"m9(M7)\": \"m9(ma7)\",\n \"m9M7\": \"m9(ma7)\",\n \"ma9\": \"ma9\",\n \"maj9\": \"ma9\",\n \"maj9b11\": \"maj9b11\",\n \"ma11\": \"ma11\",\n \"11(#7)\": \"ma11\",\n \"11#7\": \"ma11\",\n \"11+7\": \"ma11\",\n \"11(+7)\": \"ma11\",\n \"+11\": \"ma11\",\n \"M11\": \"ma11\",\n \"ma11(#5)\": \"ma11(#5)\",\n \"maj11#5\": \"ma11(#5)\",\n \"maj11+5\": \"ma11(#5)\",\n \"maj11(+5)\": \"ma11(#5)\",\n \"+11(#5)\": \"ma11(#5)\",\n \"+11#5\": \"ma11(#5)\",\n \"M11+5\": \"ma11(#5)\",\n \"+11(+5)\": \"ma11(#5)\",\n \"maj11(#5)\": \"ma11(#5)\",\n \"ma11#5\": \"ma11(#5)\",\n \"ma11+5\": \"ma11(#5)\",\n \"ma11(+5)\": \"ma11(#5)\",\n \"ma11(#9)\": \"ma11(#9)\",\n \"maj11#9\": \"ma11(#9)\",\n \"maj11+9\": \"ma11(#9)\",\n \"maj11(+9)\": \"ma11(#9)\",\n \"+11(#9)\": \"ma11(#9)\",\n \"+11#9\": \"ma11(#9)\",\n \"M11+9\": \"ma11(#9)\",\n \"+11(+9)\": \"ma11(#9)\",\n \"maj11(#9)\": \"ma11(#9)\",\n \"ma11#9\": \"ma11(#9)\",\n \"ma11+9\": \"ma11(#9)\",\n \"ma11(+9)\": \"ma11(#9)\",\n \"ma11(b13)\": \"ma11(b13)\",\n \"maj11b13\": \"ma11(b13)\",\n \"maj11-13\": \"ma11(b13)\",\n \"maj11(-13)\": \"ma11(b13)\",\n \"+11(b13)\": \"ma11(b13)\",\n \"+11b13\": \"ma11(b13)\",\n \"M11-13\": \"ma11(b13)\",\n \"+11(-13)\": \"ma11(b13)\",\n \"maj11(b13)\": \"ma11(b13)\",\n \"ma11b13\": \"ma11(b13)\",\n \"ma11-13\": \"ma11(b13)\",\n \"ma11(-13)\": \"ma11(b13)\",\n \"ma11(b5)\": \"ma11(b5)\",\n \"maj11b5\": \"ma11(b5)\",\n \"maj11-5\": \"ma11(b5)\",\n \"maj11(-5)\": \"ma11(b5)\",\n \"+11(b5)\": \"ma11(b5)\",\n \"+11b5\": \"ma11(b5)\",\n \"M11-5\": \"ma11(b5)\",\n \"+11(-5)\": \"ma11(b5)\",\n \"maj11(b5)\": \"ma11(b5)\",\n \"ma11b5\": \"ma11(b5)\",\n \"ma11-5\": \"ma11(b5)\",\n \"ma11(-5)\": \"ma11(b5)\",\n \"ma11(b9)\": \"ma11(b9)\",\n \"maj11b9\": \"ma11(b9)\",\n \"maj11(-9)\": \"ma11(b9)\",\n \"maj11-9\": \"ma11(b9)\",\n \"+11(b9)\": \"ma11(b9)\",\n \"+11b9\": \"ma11(b9)\",\n \"M11(-9)\": \"ma11(b9)\",\n \"+11-9\": \"ma11(b9)\",\n \"maj11(b9)\": \"ma11(b9)\",\n \"ma11b9\": \"ma11(b9)\",\n \"ma11(-9)\": \"ma11(b9)\",\n \"ma11-9\": \"ma11(b9)\",\n \"ma13\": \"ma13\",\n \"13(#7)\": \"ma13\",\n \"+13\": \"ma13\",\n \"M13\": \"ma13\",\n \"ma13(#11)\": \"ma13(#11)\",\n \"maj13#11\": \"ma13(#11)\",\n \"maj13+11\": \"ma13(#11)\",\n \"maj13(+11)\": \"ma13(#11)\",\n \"+13(#11)\": \"ma13(#11)\",\n \"+13#11\": \"ma13(#11)\",\n \"M13+11\": \"ma13(#11)\",\n \"+13(+11)\": \"ma13(#11)\",\n \"maj13(#11)\": \"ma13(#11)\",\n \"ma7#11\": \"ma9(#11)\",\n \"ma13+11\": \"ma13(#11)\",\n \"ma13(+11)\": \"ma13(#11)\",\n \"ma13(#11#5)\": \"ma13(#11#5)\",\n \"maj13#11#5\": \"ma13(#11#5)\",\n \"maj13+11+5\": \"ma13(#11#5)\",\n \"maj13(+11+5)\": \"ma13(#11#5)\",\n \"+13(#11#5)\": \"ma13(#11#5)\",\n \"+13#11#5\": \"ma13(#11#5)\",\n \"M13+11+5\": \"ma13(#11#5)\",\n \"+13(+11+5)\": \"ma13(#11#5)\",\n \"maj13(#11#5)\": \"ma13(#11#5)\",\n \"ma7#11#5\": \"ma9(#11#5)\",\n \"ma13+11+5\": \"ma13(#11#5)\",\n \"ma13(+11+5)\": \"ma13(#11#5)\",\n \"ma13(#5)\": \"ma13(#5)\",\n \"maj13#5\": \"ma13(#5)\",\n \"maj13+5\": \"ma13(#5)\",\n \"maj13(+5)\": \"ma13(#5)\",\n \"+13(#5)\": \"ma13(#5)\",\n \"+13#5\": \"ma13(#5)\",\n \"M13+5\": \"ma13(#5)\",\n \"+13(+5)\": \"ma13(#5)\",\n \"maj13(#5)\": \"ma13(#5)\",\n \"ma13#5\": \"ma13(#5)\",\n \"ma13+5\": \"ma13(#5)\",\n \"ma13(+5)\": \"ma13(#5)\",\n \"ma13(#9)\": \"ma13(#9)\",\n \"maj13#9\": \"ma13(#9)\",\n \"maj13(+9)\": \"ma13(#9)\",\n \"maj13+9\": \"ma13(#9)\",\n \"+13(#9)\": \"ma13(#9)\",\n \"+13#9\": \"ma13(#9)\",\n \"M13(+9)\": \"ma13(#9)\",\n \"+13+9\": \"ma13(#9)\",\n \"maj13(#9)\": \"ma13(#9)\",\n \"ma13#9\": \"ma13(#9)\",\n \"ma13(+9)\": \"ma13(#9)\",\n \"ma13+9\": \"ma13(#9)\",\n \"ma13(#9#5)\": \"ma13(#9#5)\",\n \"maj13#9#5\": \"ma13(#9#5)\",\n \"maj13(+9+5)\": \"ma13(#9#5)\",\n \"maj13+9+5\": \"ma13(#9#5)\",\n \"+13(#9#5)\": \"ma13(#9#5)\",\n \"+13#9#5\": \"ma13(#9#5)\",\n \"M13(+9+5)\": \"ma13(#9#5)\",\n \"+13+9+5\": \"ma13(#9#5)\",\n \"maj13(#9#5)\": \"ma13(#9#5)\",\n \"ma7#9#5\": \"ma13(#9#5)\",\n \"ma13(+9+5)\": \"ma13(#9#5)\",\n \"ma13+9+5\": \"ma13(#9#5)\",\n \"ma13(b5)\": \"ma13(b5)\",\n \"maj13b5\": \"ma13(b5)\",\n \"maj13-5\": \"ma13(b5)\",\n \"maj13(-5)\": \"ma13(b5)\",\n \"+13(b5)\": \"ma13(b5)\",\n \"+13b5\": \"ma13(b5)\",\n \"M13-5\": \"ma13(b5)\",\n \"+13(-5)\": \"ma13(b5)\",\n \"maj13(b5)\": \"ma13(b5)\",\n \"ma13b5\": \"ma13(b5)\",\n \"ma13-5\": \"ma13(b5)\",\n \"ma13(-5)\": \"ma13(b5)\",\n \"ma13(b9)\": \"ma13(b9)\",\n \"maj13b9\": \"ma13(b9)\",\n \"maj13-9\": \"ma13(b9)\",\n \"maj13(-9)\": \"ma13(b9)\",\n \"+13(b9)\": \"ma13(b9)\",\n \"+13b9\": \"ma13(b9)\",\n \"M13-9\": \"ma13(b9)\",\n \"+13(-9)\": \"ma13(b9)\",\n \"maj13(b9)\": \"ma13(b9)\",\n \"ma13b9\": \"ma13(b9)\",\n \"ma13-9\": \"ma13(b9)\",\n \"ma13(-9)\": \"ma13(b9)\",\n \"ma13(b9#5)\": \"ma13(b9#5)\",\n \"maj13b9#5\": \"ma13(b9#5)\",\n \"maj13-9+5\": \"ma13(b9#5)\",\n \"maj13(-9+5)\": \"ma13(b9#5)\",\n \"+13(b9#5)\": \"ma13(b9#5)\",\n \"+13b9#5\": \"ma13(b9#5)\",\n \"M13-9+5\": \"ma13(b9#5)\",\n \"+13(-9+5)\": \"ma13(b9#5)\",\n \"maj13(b9#5)\": \"ma13(b9#5)\",\n \"ma7b9#5\": \"ma13(b9#5)\",\n \"ma13-9+5\": \"ma13(b9#5)\",\n \"ma13(-9+5)\": \"ma13(b9#5)\",\n \"ma6\": \"ma6\",\n \"ma6(9)\": \"ma6(9)\",\n \"ma69\": \"ma6(9)\",\n \"ma7\": \"ma7\",\n \"+7\": \"ma7\",\n \"#7\": \"ma7\",\n \"M7\": \"ma7\",\n \"Maj7\": \"ma7\",\n \"maj7\": \"ma7\",\n \"(triangle)\": \"ma7\",\n \"ma7(#11)\": \"ma7(#11)\",\n \"maj7#11\": \"ma7(#11)\",\n \"maj7+11\": \"ma7(#11)\",\n \"maj7(+11)\": \"ma7(#11)\",\n \"+7(#11)\": \"ma7(#11)\",\n \"+7#11\": \"ma7(#11)\",\n \"M7+11\": \"ma7(#11)\",\n \"+7(+11)\": \"ma7(#11)\",\n \"maj7(#11)\": \"ma7(#11)\",\n \"ma7+11\": \"ma7(#11)\",\n \"ma7(+11)\": \"ma7(#11)\",\n \"ma7(#4)\": \"ma7(#4)\",\n \"ma7(#5)\": \"ma7(#5)\",\n \"maj7#5\": \"ma7(#5)\",\n \"maj7+5\": \"ma7(#5)\",\n \"maj7(+5)\": \"ma7(#5)\",\n \"+7(#5)\": \"ma7(#5)\",\n \"+7#5\": \"ma7(#5)\",\n \"M7+5\": \"ma7(#5)\",\n \"+7(+5)\": \"ma7(#5)\",\n \"maj7(#5)\": \"ma7(#5)\",\n \"ma7#5\": \"ma7(#5)\",\n \"ma7+5\": \"ma7(#5)\",\n \"ma7(+5)\": \"ma7(#5)\",\n \"aug(M7)\": \"ma7(#5)\",\n \"aug(+7)\": \"ma7(#5)\",\n \"aug(ma7)\": \"ma7(#5)\",\n \"aug(maj7)\": \"ma7(#5)\",\n \"ma7(#9)\": \"ma7(#9)\",\n \"maj7#9\": \"ma7(#9)\",\n \"maj7+9\": \"ma7(#9)\",\n \"maj7(+9)\": \"ma7(#9)\",\n \"+7(#9)\": \"ma7(#9)\",\n \"+7#9\": \"ma7(#9)\",\n \"M7+9\": \"ma7(#9)\",\n \"+7(+9)\": \"ma7(#9)\",\n \"maj7(#9)\": \"ma7(#9)\",\n \"ma7#9\": \"ma7(#9)\",\n \"ma7+9\": \"ma7(#9)\",\n \"ma7(+9)\": \"ma7(#9)\",\n \"ma7(b13)\": \"ma7(b13)\",\n \"maj7b13\": \"ma7(b13)\",\n \"maj7-13\": \"ma7(b13)\",\n \"maj7(-13)\": \"ma7(b13)\",\n \"+7(b13)\": \"ma7(b13)\",\n \"+7b13\": \"ma7(b13)\",\n \"M7-13\": \"ma7(b13)\",\n \"+7(-13)\": \"ma7(b13)\",\n \"maj7(b13)\": \"ma7(b13)\",\n \"ma7b13\": \"ma9(b13)\",\n \"ma7-13\": \"ma7(b13)\",\n \"ma7(-13)\": \"ma7(b13)\",\n \"ma7(b5)\": \"ma7(b5)\",\n \"maj7b5\": \"ma7(b5)\",\n \"maj7-5\": \"ma7(b5)\",\n \"maj7(-5)\": \"ma7(b5)\",\n \"+7(b5)\": \"ma7(b5)\",\n \"+7b5\": \"ma7(b5)\",\n \"M7-5\": \"ma7(b5)\",\n \"+7(-5)\": \"ma7(b5)\",\n \"maj7(b5)\": \"ma7(b5)\",\n \"ma7b5\": \"ma7(b5)\",\n \"ma7-5\": \"ma7(b5)\",\n \"ma7(-5)\": \"ma7(b5)\",\n \"ma7(b9)\": \"ma7(b9)\",\n \"maj7b9\": \"ma7(b9)\",\n \"maj7-9\": \"ma7(b9)\",\n \"maj7(-9)\": \"ma7(b9)\",\n \"+7(b9)\": \"ma7(b9)\",\n \"+7b9\": \"ma7(b9)\",\n \"M7-9\": \"ma7(b9)\",\n \"+7(-9)\": \"ma7(b9)\",\n \"maj7(b9)\": \"ma7(b9)\",\n \"ma7b9\": \"ma7(b9)\",\n \"ma7-9\": \"ma7(b9)\",\n \"ma7(-9)\": \"ma7(b9)\",\n \"ma7(no3)\": \"ma7(no3)\",\n \"9(#7)\": \"ma9\",\n \"+9\": \"ma9\",\n \"M9\": \"ma9\",\n \"ma9(#11)\": \"ma9(#11)\",\n \"maj9#11\": \"ma9(#11)\",\n \"maj9+11\": \"ma9(#11)\",\n \"maj9(+11)\": \"ma9(#11)\",\n \"+9(#11)\": \"ma9(#11)\",\n \"+9#11\": \"ma9(#11)\",\n \"M9+11\": \"ma9(#11)\",\n \"+9(+11)\": \"ma9(#11)\",\n \"maj9(#11)\": \"ma9(#11)\",\n \"ma9+11\": \"ma9(#11)\",\n \"ma9(+11)\": \"ma9(#11)\",\n \"ma9(#11#5)\": \"ma9(#11#5)\",\n \"maj9#11#5\": \"ma9(#11#5)\",\n \"maj9+11+5\": \"ma9(#11#5)\",\n \"maj9(+11+5)\": \"ma9(#11#5)\",\n \"+9(#11#5)\": \"ma9(#11#5)\",\n \"+9#11#5\": \"ma9(#11#5)\",\n \"M9+11+5\": \"ma9(#11#5)\",\n \"+9(+11+5)\": \"ma9(#11#5)\",\n \"maj9(#11#5)\": \"ma9(#11#5)\",\n \"ma9+11+5\": \"ma9(#11#5)\",\n \"ma9(+11+5)\": \"ma9(#11#5)\",\n \"ma9(#4)\": \"ma9(#4)\",\n \"ma9(#5)\": \"ma9(#5)\",\n \"maj9#5\": \"ma9(#5)\",\n \"maj9+5\": \"ma9(#5)\",\n \"maj9(+5)\": \"ma9(#5)\",\n \"+9(#5)\": \"ma9(#5)\",\n \"+9#5\": \"ma9(#5)\",\n \"M9+5\": \"ma9(#5)\",\n \"+9(+5)\": \"ma9(#5)\",\n \"maj9(#5)\": \"ma9(#5)\",\n \"ma9#5\": \"ma9(#5)\",\n \"ma9+5\": \"ma9(#5)\",\n \"ma9(+5)\": \"ma9(#5)\",\n \"ma9(13)\": \"ma9(13)\",\n \"ma9(b13)\": \"ma9(b13)\",\n \"maj9b13\": \"ma9(b13)\",\n \"maj9-13\": \"ma9(b13)\",\n \"maj9(-13)\": \"ma9(b13)\",\n \"+9(b13)\": \"ma9(b13)\",\n \"+9b13\": \"ma9(b13)\",\n \"M9-13\": \"ma9(b13)\",\n \"+9(-13)\": \"ma9(b13)\",\n \"maj9(b13)\": \"ma9(b13)\",\n \"ma9-13\": \"ma9(b13)\",\n \"ma9(-13)\": \"ma9(b13)\",\n \"ma9(b13#5)\": \"ma9(b13#5)\",\n \"maj9b13#5\": \"ma9(b13#5)\",\n \"maj9-13+5\": \"ma9(b13#5)\",\n \"maj9(-13+5)\": \"ma9(b13#5)\",\n \"+9(b13#5)\": \"ma9(b13#5)\",\n \"+9b13#5\": \"ma9(b13#5)\",\n \"M9-13+5\": \"ma9(b13#5)\",\n \"+9(-13+5)\": \"ma9(b13#5)\",\n \"maj9(b13#5)\": \"ma9(b13#5)\",\n \"ma7b13#5\": \"ma9(b13#5)\",\n \"ma9-13+5\": \"ma9(b13#5)\",\n \"ma9(-13+5)\": \"ma9(b13#5)\",\n \"ma9(b5)\": \"ma9(b5)\",\n \"maj9b5\": \"ma9(b5)\",\n \"maj9-5\": \"ma9(b5)\",\n \"maj9(-5)\": \"ma9(b5)\",\n \"+9(b5)\": \"ma9(b5)\",\n \"+9b5\": \"ma9(b5)\",\n \"M9-5\": \"ma9(b5)\",\n \"+9(-5)\": \"ma9(b5)\",\n \"maj9(b5)\": \"ma9(b5)\",\n \"ma9b5\": \"ma9(b5)\",\n \"ma9-5\": \"ma9(b5)\",\n \"ma9(-5)\": \"ma9(b5)\",\n \"sus\": \"sus\",\n \"sus4\": \"sus\",\n \"sus(no5)\": \"sus(no5)\",\n \"sus#42\": \"sus#42\",\n \"\": \"\"\n};\nvar $d643910899695a08$export$2e2bcd8739ae039 = $d643910899695a08$var$mapping;\n\n\n\nfunction $f52913d8767c6236$export$d332d76d125f0cbe(line) {\n return line.items.some((item)=>item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039) && !!item.chords);\n}\nfunction $f52913d8767c6236$export$bf7e789722aab9d6(line) {\n return line.items.some((item)=>item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039) && (item.chords || item.annotation));\n}\nfunction $f52913d8767c6236$export$e3f63561d52b936d(item) {\n return 'evaluate' in item && typeof item.evaluate === 'function';\n}\nfunction $f52913d8767c6236$export$bc3bea8325045070(string, length) {\n let paddedString = string;\n for(let l = string.length; l < length; l += 1, paddedString += ' ');\n return paddedString;\n}\nfunction $f52913d8767c6236$export$ee27c052bca048fb(object) {\n return !!object && object.length > 0;\n}\nfunction $f52913d8767c6236$export$844ec244b1367d54(obj) {\n return typeof obj === 'string';\n}\nfunction $f52913d8767c6236$var$dasherize(string) {\n return string.replace(/[A-Z]/g, (match)=>`-${match.toLowerCase()}`);\n}\nfunction $f52913d8767c6236$export$59d377d2a2e0150a(css, scope = '') {\n return Object.entries(css).map(([selector, styles])=>{\n const rules = Object.entries(styles).map(([property, value])=>`${$f52913d8767c6236$var$dasherize(property)}: ${value};`).join('\\n ');\n const scopedSelector = `${scope} ${selector}`.trim();\n return `\n${scopedSelector} {\n ${rules}\n}`.substring(1);\n }).join('\\n\\n');\n}\nfunction $f52913d8767c6236$export$c106dd0671a0fc2d(message) {\n const proc = globalThis.process;\n if (typeof proc === 'object' && typeof proc.emitWarning === 'function') proc.emitWarning(message);\n else // eslint-disable-next-line no-console\n console.warn(message);\n}\nfunction $f52913d8767c6236$export$b680e6b2c82f8c2f(message) {\n try {\n throw new Error(`DEPRECATION: ${message}`);\n } catch (e) {\n const error = e;\n $f52913d8767c6236$export$c106dd0671a0fc2d(`${message}\\n${error.stack}`);\n }\n}\nfunction $f52913d8767c6236$export$78d1711480f95c3e(string) {\n return string === null || string === undefined || string === '';\n}\nfunction $f52913d8767c6236$export$51fabfbeed747719(key, keyType, suffix) {\n switch(keyType){\n case 0, $72b24102c7d826fd$export$1321df9b16c30c6a:\n return typeof key === 'string' && key.toLowerCase() === key;\n default:\n return typeof suffix === 'string' && suffix[0] === 'm' && suffix.substring(0, 2).toLowerCase() !== 'ma' && suffix.substring(0, 3).toLowerCase() !== 'maj';\n }\n}\nfunction $f52913d8767c6236$export$ba13e0e2f19e61a1(string) {\n return string.replace(/\\r\\n?/g, '\\n');\n}\nclass $f52913d8767c6236$var$GradeSet {\n constructor(grades){\n this.grades = grades;\n }\n determineGrade(modifier, preferredModifier, grade) {\n return this.getGradeForModifier(modifier, grade) || this.getGradeForModifier((0, $72b24102c7d826fd$export$f0f7b592ea674eb2), grade) || this.getGradeForModifier(preferredModifier, grade) || this.getGradeForModifier((0, $72b24102c7d826fd$export$f5b1d6b4244c9536), grade);\n }\n getGradeForModifier(modifier, grade) {\n if (modifier) return this.grades[modifier][grade];\n return null;\n }\n}\nfunction $f52913d8767c6236$var$determineKey({ type: type, modifier: modifier, preferredModifier: preferredModifier, grade: grade, minor: minor }) {\n const mode = minor ? (0, $72b24102c7d826fd$export$f23edc19d247fd25) : (0, $72b24102c7d826fd$export$39615881bb0d21f6);\n const grades = (0, $0cb401ed3f1d0550$export$40141681ebb03523)[type][mode];\n return new $f52913d8767c6236$var$GradeSet(grades).determineGrade(modifier, preferredModifier, grade);\n}\nfunction $f52913d8767c6236$export$65f5b958d546bb3f({ type: type, modifier: modifier, preferredModifier: preferredModifier, grade: grade, minor: minor }) {\n let key = $f52913d8767c6236$var$determineKey({\n type: type,\n modifier: modifier,\n preferredModifier: preferredModifier,\n grade: grade,\n minor: minor\n });\n if (!key) throw new Error(`Could not resolve\n type=${type}\n modifier=${modifier}\n grade=${grade}\n preferredModifier=${preferredModifier}\n minor=${minor}\nto a key`);\n if (minor && type === (0, $72b24102c7d826fd$export$1321df9b16c30c6a)) key = key.toLowerCase();\n return key;\n}\nfunction $f52913d8767c6236$export$1adf39ab1ab70d69(suffix) {\n if (suffix === null) return null;\n if ((0, $d643910899695a08$export$2e2bcd8739ae039)[suffix] === '[blank]') return null;\n return (0, $d643910899695a08$export$2e2bcd8739ae039)[suffix] || suffix;\n}\nfunction $f52913d8767c6236$export$9a00dee1beb8f576(string) {\n return `${string.charAt(0).toUpperCase() + string.slice(1).toLowerCase()}`;\n}\n\n\nconst $4d72f408c2526a1c$var$regexes = {\n symbol: /^(?((?[A-Ga-g])(?#|b)?))(?m)?$/,\n solfege: /^(?((?Do|Re|Mi|Fa|Sol|La|Si|do|re|mi|fa|sol|la|si)(?#|b)?))(?m)?$/,\n numeric: /^(?(?#|b)?(?[1-7]))(?m)?$/,\n numeral: /^(?(?#|b)?(?I{1,3}|IV|VI{0,2}|i{1,3}|iv|vi{0,2}))$/\n};\nconst $4d72f408c2526a1c$var$KEY_TYPES = [\n (0, $72b24102c7d826fd$export$27c95a7104c1f7aa),\n (0, $72b24102c7d826fd$export$539a6499f4711c57),\n (0, $72b24102c7d826fd$export$4d318981b5a83836),\n (0, $72b24102c7d826fd$export$1321df9b16c30c6a)\n];\nconst $4d72f408c2526a1c$var$NATURAL_MINORS = [\n 1,\n 2,\n 3,\n 4,\n 5,\n 8,\n 9,\n 10\n];\nconst $4d72f408c2526a1c$var$NO_FLAT_GRADES = [\n 4,\n 11\n];\nconst $4d72f408c2526a1c$var$NO_FLAT_NUMBERS = [\n 1,\n 4\n];\nconst $4d72f408c2526a1c$var$NO_SHARP_GRADES = [\n 5,\n 0\n];\nconst $4d72f408c2526a1c$var$NO_SHARP_NUMBERS = [\n 3,\n 7\n];\n/**\n * Represents a key, such as Eb (symbol), #3 (numeric) or VII (numeral).\n *\n * The only function considered public API is `Key.distance`\n */ class $4d72f408c2526a1c$var$Key {\n get unicodeModifier() {\n switch(this.modifier){\n case 0, $72b24102c7d826fd$export$1ea14522906630af:\n return '\\u266d';\n case 0, $72b24102c7d826fd$export$f5b1d6b4244c9536:\n return '\\u266f';\n default:\n return null;\n }\n }\n static parse(keyString) {\n if (!keyString) return null;\n const trimmed = keyString.trim();\n if (!trimmed) return null;\n for(let i = 0, count = $4d72f408c2526a1c$var$KEY_TYPES.length; i < count; i += 1){\n const resolvedKey = this.parseAsType(trimmed, $4d72f408c2526a1c$var$KEY_TYPES[i]);\n if (resolvedKey) return resolvedKey;\n }\n return null;\n }\n static parseAsType(trimmed, keyType) {\n const match = trimmed.match($4d72f408c2526a1c$var$regexes[keyType]);\n if (!match) return null;\n const { minor: minor, note: note, modifier: modifier } = match.groups;\n return this.resolve({\n key: note,\n keyType: keyType,\n minor: minor || false,\n modifier: modifier || null\n });\n }\n static resolve({ key: key, keyType: keyType, minor: minor, modifier: modifier }) {\n const keyString = `${key}`;\n const isMinor = this.isMinor(keyString, keyType, minor);\n if (keyType === (0, $72b24102c7d826fd$export$27c95a7104c1f7aa) || keyType === (0, $72b24102c7d826fd$export$539a6499f4711c57)) {\n const grade = this.toGrade(keyString, modifier || (0, $72b24102c7d826fd$export$f0f7b592ea674eb2), keyType, isMinor);\n if (grade !== null) return new $4d72f408c2526a1c$var$Key({\n grade: 0,\n minor: isMinor,\n type: keyType,\n modifier: modifier || null,\n preferredModifier: modifier || null,\n referenceKeyGrade: grade,\n originalKeyString: keyString\n });\n }\n const number = this.getNumberFromKey(keyString, keyType);\n return new $4d72f408c2526a1c$var$Key({\n number: number,\n minor: isMinor,\n type: keyType,\n modifier: modifier || null,\n preferredModifier: modifier || null,\n originalKeyString: keyString\n });\n }\n static getNumberFromKey(keyString, keyType) {\n if (keyType === (0, $72b24102c7d826fd$export$4d318981b5a83836)) return parseInt(keyString, 10);\n const uppercaseKey = keyString.toUpperCase();\n return (0, $72b24102c7d826fd$export$6145372d252f6576).findIndex((numeral)=>uppercaseKey === numeral) + 1;\n }\n static keyWithModifier(key, modifier, type) {\n const normalizedKey = key.toUpperCase();\n const modifierString = modifier || '';\n if (type === (0, $72b24102c7d826fd$export$539a6499f4711c57)) return `${key.charAt(0).toUpperCase() + key.slice(1).toLowerCase()}${modifierString}`;\n if (type === (0, $72b24102c7d826fd$export$27c95a7104c1f7aa)) return `${normalizedKey}${modifierString}`;\n return `${modifierString}${normalizedKey}`;\n }\n static toGrade(key, modifier, type, isMinor) {\n const mode = isMinor ? (0, $72b24102c7d826fd$export$f23edc19d247fd25) : (0, $72b24102c7d826fd$export$39615881bb0d21f6);\n const grades = (0, $0cb401ed3f1d0550$export$7e1516eaf3ebe01f)[type][mode][modifier];\n if (key in grades) return grades[key];\n const upperCaseKey = key.toUpperCase();\n if (upperCaseKey in grades) return grades[upperCaseKey];\n return null;\n }\n static isMinor(key, keyType, minor) {\n switch(keyType){\n case 'numeral':\n return key.toLowerCase() === key;\n default:\n switch(typeof minor){\n case 'string':\n return minor === 'm' || minor.toLowerCase() === 'min';\n case 'boolean':\n return minor;\n default:\n return false;\n }\n }\n }\n static parseOrFail(keyString) {\n const parsed = this.parse(keyString);\n if (!parsed) throw new Error(`Failed to parse ${keyString}`);\n return parsed;\n }\n static wrap(keyStringOrObject) {\n if (keyStringOrObject instanceof $4d72f408c2526a1c$var$Key) return keyStringOrObject;\n if (keyStringOrObject === null) return null;\n return this.parse(keyStringOrObject);\n }\n static wrapOrFail(keyStringOrObject = null) {\n if (keyStringOrObject === null) throw new Error('Unexpected null key');\n const wrapped = this.wrap(keyStringOrObject);\n if (wrapped === null) throw new Error(`Failed: invalid key ${keyStringOrObject}`);\n return wrapped;\n }\n static toString(keyStringOrObject) {\n return `${$4d72f408c2526a1c$var$Key.wrapOrFail(keyStringOrObject)}`;\n }\n /**\n * Calculates the distance in semitones between one key and another.\n * @param {Key | string} oneKey the key\n * @param {Key | string} otherKey the other key\n * @return {number} the distance in semitones\n */ static distance(oneKey, otherKey) {\n return this.wrapOrFail(oneKey).distanceTo(otherKey);\n }\n constructor({ grade: grade = null, number: number = null, minor: minor, type: type, modifier: modifier, referenceKeyGrade: referenceKeyGrade = null, originalKeyString: originalKeyString = null, preferredModifier: preferredModifier = null }){\n this.number = null;\n this.minor = false;\n this.referenceKeyGrade = null;\n this.originalKeyString = null;\n this.grade = grade;\n this.number = number;\n this.minor = minor;\n this.type = type;\n this.modifier = modifier;\n this.preferredModifier = preferredModifier;\n this.referenceKeyGrade = referenceKeyGrade;\n this.originalKeyString = originalKeyString;\n }\n distanceTo(otherKey) {\n const otherKeyObj = $4d72f408c2526a1c$var$Key.wrapOrFail(otherKey);\n return $4d72f408c2526a1c$var$Key.shiftGrade(otherKeyObj.effectiveGrade - this.effectiveGrade);\n }\n get effectiveGrade() {\n if (this.grade === null) throw new Error('Cannot calculate effectiveGrade without a grade');\n return $4d72f408c2526a1c$var$Key.shiftGrade(this.grade + (this.referenceKeyGrade || 0));\n }\n isMinor() {\n return this.minor;\n }\n makeMinor() {\n return this.set({\n minor: true\n });\n }\n get relativeMajor() {\n return this.changeGrade(3).set({\n minor: false\n });\n }\n get relativeMinor() {\n return this.changeGrade(-3).set({\n minor: true\n });\n }\n toMajor() {\n if (this.isMinor()) return this.transpose(3).set({\n minor: false\n });\n return this.clone();\n }\n clone() {\n return this.set({});\n }\n ensureGrade() {\n if (this.grade === null) this.calculateGradeFromNumber();\n }\n calculateGradeFromNumber() {\n if (this.number === null) throw new Error('Cannot calculate grade, number is null');\n this.grade = $4d72f408c2526a1c$var$Key.toGrade(this.number.toString(), this.modifier || (0, $72b24102c7d826fd$export$f0f7b592ea674eb2), (0, $72b24102c7d826fd$export$4d318981b5a83836), this.isMinor());\n this.number = null;\n }\n toChordSymbol(key) {\n if (this.isChordSymbol()) return this.clone();\n const { modifier: modifier } = this;\n this.ensureGrade();\n const keyObj = $4d72f408c2526a1c$var$Key.wrapOrFail(key);\n const chordSymbol = this.set({\n referenceKeyGrade: $4d72f408c2526a1c$var$Key.shiftGrade(this.effectiveGrade + keyObj.effectiveGrade),\n grade: 0,\n type: (0, $72b24102c7d826fd$export$27c95a7104c1f7aa),\n modifier: null,\n preferredModifier: modifier || keyObj.modifier\n });\n const normalized = chordSymbol.normalizeEnharmonics(keyObj);\n return modifier ? normalized.set({\n preferredModifier: modifier,\n modifier: null\n }) : normalized;\n }\n toChordSolfege(key) {\n if (this.isChordSolfege()) return this.clone();\n const { modifier: modifier } = this;\n this.ensureGrade();\n const keyObj = $4d72f408c2526a1c$var$Key.wrapOrFail(key);\n const chordSolfege = this.set({\n referenceKeyGrade: $4d72f408c2526a1c$var$Key.shiftGrade(this.effectiveGrade + keyObj.effectiveGrade),\n grade: 0,\n type: (0, $72b24102c7d826fd$export$539a6499f4711c57),\n modifier: null,\n preferredModifier: modifier || keyObj.modifier\n });\n const normalized = chordSolfege.normalizeEnharmonics(keyObj);\n return modifier ? normalized.set({\n preferredModifier: modifier,\n modifier: null\n }) : normalized;\n }\n toChordSymbolString(key) {\n return this.toChordSymbol(key).toString();\n }\n toChordSolfegeString(key) {\n return this.toChordSolfege(key).toString();\n }\n is(type) {\n return this.type === type;\n }\n isNumeric() {\n return this.is((0, $72b24102c7d826fd$export$4d318981b5a83836));\n }\n isChordSymbol() {\n return this.is((0, $72b24102c7d826fd$export$27c95a7104c1f7aa));\n }\n isChordSolfege() {\n return this.is((0, $72b24102c7d826fd$export$539a6499f4711c57));\n }\n isNumeral() {\n return this.is((0, $72b24102c7d826fd$export$1321df9b16c30c6a));\n }\n equals(otherKey) {\n return this.grade === otherKey.grade && this.number === otherKey.number && this.modifier === otherKey.modifier && this.preferredModifier === otherKey.preferredModifier && this.type === otherKey.type && this.minor === otherKey.minor;\n }\n static equals(oneKey, otherKey) {\n if (oneKey === null) return otherKey === null;\n if (otherKey === null) return false;\n return oneKey.equals(otherKey);\n }\n toNumeric(key = null) {\n if (this.isNumeric()) return this.clone();\n if (this.isNumeral()) return this.set({\n type: (0, $72b24102c7d826fd$export$4d318981b5a83836)\n });\n const referenceKey = $4d72f408c2526a1c$var$Key.wrapOrFail(key);\n const referenceKeyGrade = referenceKey.effectiveGrade;\n return this.set({\n type: (0, $72b24102c7d826fd$export$4d318981b5a83836),\n grade: $4d72f408c2526a1c$var$Key.shiftGrade(this.effectiveGrade - referenceKeyGrade),\n referenceKeyGrade: 0,\n modifier: null,\n preferredModifier: referenceKey.modifier\n });\n }\n toNumericString(key = null) {\n return this.toNumeric(key).toString();\n }\n toNumeral(key = null) {\n if (this.isNumeral()) return this.clone();\n if (this.isNumeric()) return this.set({\n type: (0, $72b24102c7d826fd$export$1321df9b16c30c6a)\n });\n const referenceKey = $4d72f408c2526a1c$var$Key.wrapOrFail(key);\n const referenceKeyGrade = referenceKey.effectiveGrade;\n return this.set({\n type: (0, $72b24102c7d826fd$export$1321df9b16c30c6a),\n grade: $4d72f408c2526a1c$var$Key.shiftGrade(this.effectiveGrade - referenceKeyGrade),\n referenceKeyGrade: 0,\n modifier: null,\n preferredModifier: referenceKey.modifier || this.modifier\n });\n }\n toNumeralString(key = null) {\n return this.toNumeral(key).toString();\n }\n toString({ showMinor: showMinor = true, useUnicodeModifier: useUnicodeModifier = false } = {}) {\n let { note: note } = this;\n if (useUnicodeModifier) note = note.replace('#', '\\u266f').replace('b', '\\u266d');\n return `${note}${showMinor ? this.minorSign : ''}`;\n }\n get note() {\n if (this.grade === null) return this.getNoteForNumber();\n if ((this.isChordSymbol() || this.isChordSolfege()) && this.referenceKeyGrade === null) throw new Error('Not possible, reference key grade is null');\n return (0, $f52913d8767c6236$export$65f5b958d546bb3f)({\n type: this.type,\n modifier: this.modifier,\n preferredModifier: this.preferredModifier,\n grade: this.effectiveGrade,\n minor: this.minor\n });\n }\n getNoteForNumber() {\n if (this.number === null) throw new Error('Not possible, grade and number are null');\n if (this.isNumeric()) return `${this.modifier || ''}${this.number}`;\n const numeral = (0, $72b24102c7d826fd$export$6145372d252f6576)[this.number - 1];\n return `${this.modifier || ''}${this.isMinor() ? numeral.toLowerCase() : numeral}`;\n }\n get minorSign() {\n if (!this.minor) return '';\n switch(this.type){\n case 0, $72b24102c7d826fd$export$27c95a7104c1f7aa:\n return 'm';\n case 0, $72b24102c7d826fd$export$539a6499f4711c57:\n return 'm';\n case 0, $72b24102c7d826fd$export$4d318981b5a83836:\n return this.isNaturalMinor() ? '' : 'm';\n default:\n return '';\n }\n }\n isNaturalMinor() {\n this.ensureGrade();\n if (!this.grade) throw new Error('Expected grade to be set, but it is is still empty.');\n return $4d72f408c2526a1c$var$NATURAL_MINORS.includes(this.grade);\n }\n transpose(delta) {\n if (delta === 0) return this;\n const originalModifier = this.modifier;\n let transposedKey = this.clone();\n const func = delta < 0 ? 'transposeDown' : 'transposeUp';\n for(let i = 0, count = Math.abs(delta); i < count; i += 1)transposedKey = transposedKey[func]();\n return transposedKey.useModifier(originalModifier);\n }\n changeGrade(delta) {\n if (this.referenceKeyGrade) return this.set({\n referenceKeyGrade: $4d72f408c2526a1c$var$Key.shiftGrade(this.referenceKeyGrade + delta)\n });\n this.ensureGrade();\n return this.set({\n grade: $4d72f408c2526a1c$var$Key.shiftGrade(this.grade + delta)\n });\n }\n transposeUp() {\n const normalizedKey = this.normalize();\n let key = normalizedKey.changeGrade(1);\n if (this.modifier || !key.canBeSharp()) key = key.useModifier(null);\n else if (key.canBeSharp()) key = key.useModifier((0, $72b24102c7d826fd$export$f5b1d6b4244c9536));\n key = key.set({\n preferredModifier: (0, $72b24102c7d826fd$export$f5b1d6b4244c9536)\n }).normalize();\n return key;\n }\n transposeDown() {\n const normalizedKey = this.normalize();\n let key = normalizedKey.changeGrade(-1);\n if (this.modifier || !key.canBeFlat()) key = key.useModifier(null);\n else if (key.canBeFlat()) key = key.useModifier((0, $72b24102c7d826fd$export$1ea14522906630af));\n return key.set({\n preferredModifier: (0, $72b24102c7d826fd$export$1ea14522906630af)\n });\n }\n canBeFlat() {\n if (this.number !== null) return !$4d72f408c2526a1c$var$NO_FLAT_NUMBERS.includes(this.number);\n return !$4d72f408c2526a1c$var$NO_FLAT_GRADES.includes(this.effectiveGrade);\n }\n canBeSharp() {\n if (this.number !== null) return !$4d72f408c2526a1c$var$NO_SHARP_NUMBERS.includes(this.number);\n return !$4d72f408c2526a1c$var$NO_SHARP_GRADES.includes(this.effectiveGrade);\n }\n setGrade(newGrade) {\n return this.set({\n grade: $4d72f408c2526a1c$var$Key.shiftGrade(newGrade)\n });\n }\n static shiftGrade(grade) {\n if (grade < 0) return this.shiftGrade(grade + 12);\n return grade % 12;\n }\n useModifier(newModifier) {\n this.ensureGrade();\n return this.set({\n modifier: newModifier\n });\n }\n normalize() {\n this.ensureGrade();\n if (this.modifier === (0, $72b24102c7d826fd$export$f5b1d6b4244c9536) && !this.canBeSharp()) return this.set({\n modifier: null\n });\n if (this.modifier === (0, $72b24102c7d826fd$export$1ea14522906630af) && !this.canBeFlat()) return this.set({\n modifier: null\n });\n return this.clone();\n }\n normalizeEnharmonics(key) {\n if (key) {\n const rootKeyString = $4d72f408c2526a1c$var$Key.wrapOrFail(key).toString({\n showMinor: true\n });\n const enharmonics = (0, $23642067c1e64fd7$export$2e2bcd8739ae039)[rootKeyString];\n const thisKeyString = this.toString({\n showMinor: false\n });\n if (enharmonics && enharmonics[thisKeyString]) return $4d72f408c2526a1c$var$Key.parseOrFail(enharmonics[thisKeyString]).set({\n minor: this.minor\n });\n }\n return this.clone();\n }\n set(attributes, overwrite = true) {\n return new $4d72f408c2526a1c$var$Key({\n ...overwrite ? {} : attributes,\n grade: this.grade,\n number: this.number,\n type: this.type,\n modifier: this.modifier,\n minor: this.minor,\n referenceKeyGrade: this.referenceKeyGrade,\n originalKeyString: this.originalKeyString,\n preferredModifier: this.preferredModifier,\n ...overwrite ? attributes : {}\n });\n }\n}\nvar $4d72f408c2526a1c$export$2e2bcd8739ae039 = $4d72f408c2526a1c$var$Key;\n\n\n\nclass $4fe61140afd91ab4$export$2e2bcd8739ae039 extends Error {\n}\n\n\n\n/**\n * Represents a Chord, consisting of a root, suffix (quality) and bass\n */ class $f0449e2486cb2372$var$Chord {\n /**\n * Tries to parse a chord string into a chord\n * Any leading or trailing whitespace is removed first, so a chord like ` \\n E/G# \\r ` is valid.\n * @param chordString the chord string, eg `Esus4/G#` or `1sus4/#3`.\n * @returns {Chord|null}\n */ static parse(chordString) {\n try {\n return this.parseOrFail(chordString);\n } catch (_error) {\n return null;\n }\n }\n static parseOrFail(chordString) {\n const trimmedChord = chordString.trim();\n try {\n const ast = (0, $33f7017b34767c5f$export$98e6a39c04603d36)(trimmedChord);\n return new $f0449e2486cb2372$var$Chord(ast);\n } catch (error) {\n const errorObj = error;\n throw new (0, $4fe61140afd91ab4$export$2e2bcd8739ae039)(`Failed parsing '${trimmedChord}': ${errorObj.message}`);\n }\n }\n /**\n * Returns a deep copy of the chord\n * @returns {Chord}\n */ clone() {\n return this.set({});\n }\n /**\n * Converts the chord to a chord symbol, using the supplied key as a reference.\n * For example, a numeric chord `#4` with reference key `E` will return the chord symbol `A#`.\n * When the chord is already a chord symbol, it will return a clone of the object.\n * @param {Key|string|null} [referenceKey=null] the reference key. The key is required when converting a\n * numeric or numeral.\n * @returns {Chord} the chord symbol\n */ toChordSymbol(referenceKey = null) {\n if (this.isChordSymbol()) return this.clone();\n const keyObj = (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).wrapOrFail(referenceKey);\n let chordSymbolChord = new $f0449e2486cb2372$var$Chord({\n suffix: this.suffix ? (0, $f52913d8767c6236$export$1adf39ab1ab70d69)(this.suffix) : null,\n root: this.root?.toChordSymbol(keyObj) || null,\n bass: this.bass?.toChordSymbol(keyObj) || null\n });\n if (this.root?.isMinor()) chordSymbolChord = chordSymbolChord.makeMinor();\n chordSymbolChord = chordSymbolChord.normalize(referenceKey);\n return chordSymbolChord;\n }\n /**\n * Converts the chord to a chord symbol string, using the supplied key as a reference.\n * For example, a numeric chord `#4` with reference key `E` will return the chord symbol `A#`.\n * When the chord is already a chord symbol, it will return a string version of the chord.\n * @param {Key|string|null} [referenceKey=null] the reference key. The key is required when converting a\n * numeric or numeral.\n * @returns {string} the chord symbol string\n * @see {toChordSymbol}\n */ toChordSymbolString(referenceKey = null) {\n return this.toChordSymbol(referenceKey).toString();\n }\n /**\n * Determines whether the chord is a chord symbol\n * @returns {boolean}\n */ isChordSymbol() {\n return this.is((0, $72b24102c7d826fd$export$27c95a7104c1f7aa));\n }\n /**\n * Converts the chord to a chord solfege, using the supplied key as a reference.\n * For example, a numeric chord `#4` with reference key `Mi` will return the chord symbol `La#`.\n * When the chord is already a chord solfege, it will return a clone of the object.\n * @param {Key|string|null} [referenceKey=null] the reference key. The key is required when converting a\n * numeric or numeral.\n * @returns {Chord} the chord solfege\n */ toChordSolfege(referenceKey = null) {\n if (this.isChordSolfege()) return this.clone();\n const keyObj = (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).wrapOrFail(referenceKey);\n let chordSolfegeChord = new $f0449e2486cb2372$var$Chord({\n suffix: this.suffix ? (0, $f52913d8767c6236$export$1adf39ab1ab70d69)(this.suffix) : null,\n root: this.root?.toChordSolfege(keyObj) || null,\n bass: this.bass?.toChordSolfege(keyObj) || null\n });\n if (this.root?.isMinor()) chordSolfegeChord = chordSolfegeChord.makeMinor();\n chordSolfegeChord = chordSolfegeChord.normalize(referenceKey);\n return chordSolfegeChord;\n }\n /**\n * Converts the chord to a chord solfege string, using the supplied key as a reference.\n * For example, a numeric chord `#4` with reference key `E` will return the chord solfege `A#`.\n * When the chord is already a chord solfege, it will return a string version of the chord.\n * @param {Key|string|null} [referenceKey=null] the reference key. The key is required when converting a\n * numeric or numeral.\n * @returns {string} the chord solfege string\n * @see {toChordSolfege}\n */ toChordSolfegeString(referenceKey = null) {\n return this.toChordSolfege(referenceKey).toString();\n }\n /**\n * Determines whether the chord is a chord solfege\n * @returns {boolean}\n */ isChordSolfege() {\n return this.is((0, $72b24102c7d826fd$export$539a6499f4711c57));\n }\n /**\n * Converts the chord to a numeric chord, using the supplied key as a reference.\n * For example, a chord symbol A# with reference key E will return the numeric chord #4.\n * @param {Key|string|null} [referenceKey=null] the reference key. The key is required when converting a chord symbol\n * @returns {Chord} the numeric chord\n */ toNumeric(referenceKey = null) {\n if (this.isNumeric()) return this.clone();\n if (this.isNumeral()) return this.transform((key)=>key.toNumeric());\n const keyObj = (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).wrap(referenceKey);\n return new $f0449e2486cb2372$var$Chord({\n suffix: (0, $f52913d8767c6236$export$1adf39ab1ab70d69)(this.suffix),\n root: this.root?.toNumeric(keyObj) || null,\n bass: this.bass?.toNumeric(keyObj) || null\n });\n }\n /**\n * Converts the chord to a numeral chord, using the supplied key as a reference.\n * For example, a chord symbol A# with reference key E will return the numeral chord #IV.\n * @param {Key|string|null} [referenceKey=null] the reference key. The key is required when converting a chord symbol\n * @returns {Chord} the numeral chord\n */ toNumeral(referenceKey = null) {\n if (this.isNumeral()) return this.clone();\n if (this.isNumeric()) return this.transform((key)=>key.toNumeral());\n const keyObj = (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).wrapOrFail(referenceKey);\n return new $f0449e2486cb2372$var$Chord({\n suffix: (0, $f52913d8767c6236$export$1adf39ab1ab70d69)(this.suffix),\n root: keyObj && this.root ? this.root.toNumeral(keyObj) : null,\n bass: this.bass?.toNumeral(keyObj) || null\n });\n }\n /**\n * Converts the chord to a numeral chord string, using the supplied kye as a reference.\n * For example, a chord symbol A# with reference key E will return the numeral chord #4.\n * @param {Key|string|null} [referenceKey=null] the reference key. The key is required when converting a chord symbol\n * @returns {string} the numeral chord string\n * @see {toNumeral}\n */ toNumeralString(referenceKey = null) {\n return this.toNumeral(referenceKey).toString();\n }\n /**\n * Determines whether the chord is numeric\n * @returns {boolean}\n */ isNumeric() {\n return this.is((0, $72b24102c7d826fd$export$4d318981b5a83836));\n }\n /**\n * Converts the chord to a numeric chord string, using the supplied kye as a reference.\n * For example, a chord symbol A# with reference key E will return the numeric chord #4.\n * @param {Key|string|null} [referenceKey=null] the reference key. The key is required when converting a chord symbol\n * @returns {string} the numeric chord string\n * @see {toNumeric}\n */ toNumericString(referenceKey = null) {\n return this.toNumeric(referenceKey).toString();\n }\n /**\n * Determines whether the chord is a numeral\n * @returns {boolean}\n */ isNumeral() {\n return this.is((0, $72b24102c7d826fd$export$1321df9b16c30c6a));\n }\n /**\n * Converts the chord to a string, eg `Esus4/G#` or `1sus4/#3`\n * @param {Object} [configuration={}] options\n * @param {boolean} [configuration.useUnicodeModifier=false] Whether or not to use unicode modifiers.\n * This will make `#` (sharp) look like `♯` and `b` (flat) look like `♭`\n * @returns {string} the chord string\n */ toString({ useUnicodeModifier: useUnicodeModifier = false } = {}) {\n let chordString = '';\n const suffix = this.suffix || '';\n const showMinor = suffix[0] !== 'm';\n if (this.root) chordString = this.root.toString({\n showMinor: showMinor,\n useUnicodeModifier: useUnicodeModifier\n }) + suffix;\n if (this.bass) return `${chordString}/${this.bass.toString({\n useUnicodeModifier: useUnicodeModifier\n })}`;\n return chordString;\n }\n /**\n * Normalizes the chord root and bass notes:\n * - Fab becomes Mi\n * - Dob becomes Si\n * - Si# becomes Do\n * - Mi# becomes Fa\n * - Fb becomes E\n * - Cb becomes B\n * - B# becomes C\n * - E# becomes F\n * - 4b becomes 3\n * - 1b becomes 7\n * - 7# becomes 1\n * - 3# becomes 4\n *\n * Besides that it normalizes the suffix if `normalizeSuffix` is `true`.\n * For example, `sus2` becomes `2`, `sus4` becomes `sus`.\n * All suffix normalizations can be found in `src/normalize_mappings/suffix-mapping.txt`.\n *\n * When the chord is minor, bass notes are normalized off of the relative major\n * of the root note. For example, `Em/A#` becomes `Em/Bb`.\n * @param {Key|string} [key=null] the key to normalize to\n * @param {Object} [options={}] options\n * @param {boolean} [options.normalizeSuffix=true] whether to normalize the chord suffix after transposing\n * @returns {Chord} the normalized chord\n */ normalize(key = null, { normalizeSuffix: normalizeSuffix = true } = {}) {\n const suffix = normalizeSuffix ? (0, $f52913d8767c6236$export$1adf39ab1ab70d69)(this.suffix) : this.suffix;\n let normalizedRoot = this.root;\n if (this.root) {\n normalizedRoot = this.root.normalize();\n if (key) normalizedRoot = normalizedRoot.normalizeEnharmonics(key);\n }\n return this.set({\n suffix: suffix,\n root: normalizedRoot,\n bass: this.bass ? this.bass.normalize().normalizeEnharmonics(normalizedRoot) : null\n });\n }\n /**\n * Switches to the specified modifier\n * @param newModifier the modifier to use: `'#'` or `'b'`\n * @returns {Chord} the new, changed chord\n */ useModifier(newModifier) {\n return this.transform((key)=>key.useModifier(newModifier));\n }\n /**\n * Transposes the chord up by 1 semitone. Eg. A becomes A#, Eb becomes E\n * @returns {Chord} the new, transposed chord\n */ transposeUp() {\n return this.transform((key)=>key.transposeUp());\n }\n /**\n * Transposes the chord down by 1 semitone. Eg. A# becomes A, E becomes Eb\n * @returns {Chord} the new, transposed chord\n */ transposeDown() {\n return this.transform((key)=>key.transposeDown());\n }\n /**\n * Transposes the chord by the specified number of semitones\n * @param delta de number of semitones\n * @returns {Chord} the new, transposed chord\n */ transpose(delta) {\n return this.transform((key)=>key.transpose(delta));\n }\n constructor({ base: base = null, modifier: modifier = null, suffix: suffix = null, bassBase: bassBase = null, bassModifier: bassModifier = null, root: root = null, bass: bass = null, chordType: chordType = null }){\n this.suffix = suffix || null;\n this.root = $f0449e2486cb2372$var$Chord.determineRoot({\n root: root,\n base: base,\n modifier: modifier,\n suffix: suffix,\n chordType: chordType\n });\n this.bass = $f0449e2486cb2372$var$Chord.determineBass({\n bass: bass,\n bassBase: bassBase,\n bassModifier: bassModifier,\n chordType: chordType\n });\n }\n equals(otherChord) {\n return this.suffix === otherChord.suffix && (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).equals(this.root, otherChord.root) && (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).equals(this.bass, otherChord.bass);\n }\n static determineRoot({ root: root, base: base, modifier: modifier, suffix: suffix, chordType: chordType }) {\n if (root) return root;\n if (!base) return null;\n if (!chordType) throw new Error('Can\\'t resolve at this point without a chord type');\n return (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).resolve({\n key: base,\n keyType: chordType,\n minor: (0, $f52913d8767c6236$export$51fabfbeed747719)(base, chordType, suffix),\n modifier: modifier\n });\n }\n static determineBass({ bass: bass, bassBase: bassBase, bassModifier: bassModifier, chordType: chordType }) {\n if (bass) return bass;\n if (!bassBase) return null;\n if (!chordType) throw new Error('Can\\'t resolve at this point without a chord type');\n return (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).resolve({\n key: bassBase,\n modifier: bassModifier || null,\n minor: false,\n keyType: chordType\n });\n }\n isMinor() {\n return this.root?.isMinor() || false;\n }\n makeMinor() {\n return this.set({\n root: this.root?.makeMinor() || null\n });\n }\n set(properties) {\n return new $f0449e2486cb2372$var$Chord({\n root: this.root?.clone() || null,\n suffix: this.suffix,\n bass: this.bass?.clone() || null,\n ...properties\n });\n }\n is(type) {\n return (!this.root || this.root.is(type)) && (!this.bass || this.bass.is(type));\n }\n transform(transformFunc) {\n return this.set({\n root: this.root ? transformFunc(this.root) : null,\n bass: this.bass ? transformFunc(this.bass) : null\n });\n }\n}\nvar $f0449e2486cb2372$export$2e2bcd8739ae039 = $f0449e2486cb2372$var$Chord;\n\n\n// Generated by peggy v. 4.2.0 (ts-pegjs plugin v. 3.1.0 )\n//\n// https://peggyjs.org/ https://github.com/metadevpro/ts-pegjs\n\"use strict\";\nfunction $d7af2fe287893822$var$peg$padEnd(str, targetLength, padString) {\n padString = padString || ' ';\n if (str.length > targetLength) return str;\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\nclass $d7af2fe287893822$export$628c65c376ead699 extends Error {\n static buildMessage(expected, found) {\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, \"\\\\\\\"\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, (ch)=>\"\\\\x0\" + hex(ch)).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, (ch)=>\"\\\\x\" + hex(ch));\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, (ch)=>\"\\\\x0\" + hex(ch)).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, (ch)=>\"\\\\x\" + hex(ch));\n }\n function describeExpectation(expectation) {\n switch(expectation.type){\n case \"literal\":\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n case \"class\":\n const escapedParts = expectation.parts.map((part)=>{\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n case \"any\":\n return \"any character\";\n case \"end\":\n return \"end of input\";\n case \"other\":\n return expectation.description;\n }\n }\n function describeExpected(expected1) {\n const descriptions = expected1.map(describeExpectation);\n let i;\n let j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for(i = 1, j = 1; i < descriptions.length; i++)if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n descriptions.length = j;\n }\n switch(descriptions.length){\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found1) {\n return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n }\n constructor(message, expected, found, location){\n super();\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = \"PeggySyntaxError\";\n if (typeof Object.setPrototypeOf === \"function\") Object.setPrototypeOf(this, $d7af2fe287893822$export$628c65c376ead699.prototype);\n else this.__proto__ = $d7af2fe287893822$export$628c65c376ead699.prototype;\n if (typeof Error.captureStackTrace === \"function\") Error.captureStackTrace(this, $d7af2fe287893822$export$628c65c376ead699);\n }\n format(sources) {\n let str = 'Error: ' + this.message;\n if (this.location) {\n let src = null;\n let k;\n for(k = 0; k < sources.length; k++)if (sources[k].grammarSource === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n let s = this.location.start;\n let loc = this.location.source + ':' + s.line + ':' + s.column;\n if (src) {\n let e = this.location.end;\n let filler = $d7af2fe287893822$var$peg$padEnd('', s.line.toString().length, ' ');\n let line = src[s.line - 1];\n let last = s.line === e.line ? e.column : line.length + 1;\n str += '\\n --> ' + loc + '\\n' + filler + ' |\\n' + s.line + ' | ' + line + '\\n' + filler + ' | ' + $d7af2fe287893822$var$peg$padEnd('', s.column - 1, ' ') + $d7af2fe287893822$var$peg$padEnd('', last - s.column, '^');\n } else str += '\\n at ' + loc;\n }\n return str;\n }\n}\nfunction $d7af2fe287893822$var$peg$parse(input, options) {\n options = options !== undefined ? options : {};\n const peg$FAILED = {};\n const peg$source = options.grammarSource;\n const peg$startRuleFunctions = {\n ChordDefinitionValue: peg$parseChordDefinitionValue\n };\n let peg$startRuleFunction = peg$parseChordDefinitionValue;\n const peg$c0 = \"frets\";\n const peg$c1 = peg$literalExpectation(\"frets\", false);\n const peg$c2 = function(name, baseFret, frets, fingers) {\n return {\n name: name,\n baseFret: baseFret || 1,\n frets: frets,\n fingers: fingers,\n text: text()\n };\n };\n const peg$c3 = \"/\";\n const peg$c4 = peg$literalExpectation(\"/\", false);\n const peg$c5 = /^[A-Ga-g]/;\n const peg$c6 = peg$classExpectation([\n [\n \"A\",\n \"G\"\n ],\n [\n \"a\",\n \"g\"\n ]\n ], false, false);\n const peg$c7 = /^[b#\\u266D\\u266F]/;\n const peg$c8 = peg$classExpectation([\n \"b\",\n \"#\",\n \"\\u266D\",\n \"\\u266F\"\n ], false, false);\n const peg$c9 = \"es\";\n const peg$c10 = peg$literalExpectation(\"es\", false);\n const peg$c11 = \"s\";\n const peg$c12 = peg$literalExpectation(\"s\", false);\n const peg$c13 = \"is\";\n const peg$c14 = peg$literalExpectation(\"is\", false);\n const peg$c15 = /^[a-zA-Z0-9#\\u266Fb\\u266D()+\\-\\/\\xF8\\u0394\\u2212]/;\n const peg$c16 = peg$classExpectation([\n [\n \"a\",\n \"z\"\n ],\n [\n \"A\",\n \"Z\"\n ],\n [\n \"0\",\n \"9\"\n ],\n \"#\",\n \"\\u266F\",\n \"b\",\n \"\\u266D\",\n \"(\",\n \")\",\n \"+\",\n \"-\",\n \"/\",\n \"\\xF8\",\n \"\\u0394\",\n \"\\u2212\"\n ], false, false);\n const peg$c17 = \"base-fret\";\n const peg$c18 = peg$literalExpectation(\"base-fret\", false);\n const peg$c19 = function(baseFret) {\n return baseFret;\n };\n const peg$c20 = \"fingers\";\n const peg$c21 = peg$literalExpectation(\"fingers\", false);\n const peg$c22 = function(fingers) {\n return fingers;\n };\n const peg$c23 = function(finger) {\n return finger;\n };\n const peg$c24 = /^[\\-A-Za-z]/;\n const peg$c25 = peg$classExpectation([\n \"-\",\n [\n \"A\",\n \"Z\"\n ],\n [\n \"a\",\n \"z\"\n ]\n ], false, false);\n const peg$c26 = /^[0-9]/;\n const peg$c27 = peg$classExpectation([\n [\n \"0\",\n \"9\"\n ]\n ], false, false);\n const peg$c28 = function(number) {\n return parseInt(number, 10);\n };\n const peg$c29 = /^[a-zA-Z]/;\n const peg$c30 = peg$classExpectation([\n [\n \"a\",\n \"z\"\n ],\n [\n \"A\",\n \"Z\"\n ]\n ], false, false);\n const peg$c31 = /^[\\-NXnx]/;\n const peg$c32 = peg$classExpectation([\n \"-\",\n \"N\",\n \"X\",\n \"n\",\n \"x\"\n ], false, false);\n const peg$c33 = function(fret) {\n return fret;\n };\n const peg$c34 = /^[1-9]/;\n const peg$c35 = peg$classExpectation([\n [\n \"1\",\n \"9\"\n ]\n ], false, false);\n const peg$c36 = \"0\";\n const peg$c37 = peg$literalExpectation(\"0\", false);\n const peg$c38 = function() {\n return 0;\n };\n const peg$c39 = \"-1\";\n const peg$c40 = peg$literalExpectation(\"-1\", false);\n const peg$c41 = /^[NXnx]/;\n const peg$c42 = peg$classExpectation([\n \"N\",\n \"X\",\n \"n\",\n \"x\"\n ], false, false);\n const peg$c43 = peg$otherExpectation(\"whitespace\");\n const peg$c44 = peg$otherExpectation(\"optional whitespace\");\n const peg$c45 = /^[ \\t\\n\\r]/;\n const peg$c46 = peg$classExpectation([\n \" \",\n \"\\t\",\n \"\\n\",\n \"\\r\"\n ], false, false);\n const peg$c47 = peg$otherExpectation(\"space\");\n const peg$c48 = /^[ \\t]/;\n const peg$c49 = peg$classExpectation([\n \" \",\n \"\\t\"\n ], false, false);\n const peg$c50 = /^[\\n\\r]/;\n const peg$c51 = peg$classExpectation([\n \"\\n\",\n \"\\r\"\n ], false, false);\n const peg$c52 = \"\\n\";\n const peg$c53 = peg$literalExpectation(\"\\n\", false);\n const peg$c54 = \"\\r\";\n const peg$c55 = peg$literalExpectation(\"\\r\", false);\n const peg$c56 = \"\\\\\";\n const peg$c57 = peg$literalExpectation(\"\\\\\", false);\n let peg$currPos = 0;\n let peg$savedPos = 0;\n const peg$posDetailsCache = [\n {\n line: 1,\n column: 1\n }\n ];\n let peg$maxFailPos = 0;\n let peg$maxFailExpected = [];\n let peg$silentFails = 0;\n let peg$result;\n if (options.startRule !== undefined) {\n if (!(options.startRule in peg$startRuleFunctions)) throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError([\n peg$otherExpectation(description)\n ], input.substring(peg$savedPos, peg$currPos), location1);\n }\n function error(message, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location1);\n }\n function peg$literalExpectation(text1, ignoreCase) {\n return {\n type: \"literal\",\n text: text1,\n ignoreCase: ignoreCase\n };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return {\n type: \"class\",\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase\n };\n }\n function peg$anyExpectation() {\n return {\n type: \"any\"\n };\n }\n function peg$endExpectation() {\n return {\n type: \"end\"\n };\n }\n function peg$otherExpectation(description) {\n return {\n type: \"other\",\n description: description\n };\n }\n function peg$computePosDetails(pos) {\n let details = peg$posDetailsCache[pos];\n let p;\n if (details) return details;\n else {\n p = pos - 1;\n while(!peg$posDetailsCache[p])p--;\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while(p < pos){\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else details.column++;\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n const startPosDetails = peg$computePosDetails(startPos);\n const endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected1) {\n if (peg$currPos < peg$maxFailPos) return;\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected1);\n }\n function peg$buildSimpleError(message, location1) {\n return new $d7af2fe287893822$export$628c65c376ead699(message, [], \"\", location1);\n }\n function peg$buildStructuredError(expected1, found, location1) {\n return new $d7af2fe287893822$export$628c65c376ead699($d7af2fe287893822$export$628c65c376ead699.buildMessage(expected1, found), expected1, found, location1);\n }\n function peg$parseChordDefinitionValue() {\n let s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = peg$parseChordDefinitionName();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseBaseFret();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c0) {\n s4 = peg$c0;\n peg$currPos += 5;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1);\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseFretWithLeadingSpace();\n if (s6 !== peg$FAILED) while(s6 !== peg$FAILED){\n s5.push(s6);\n s6 = peg$parseFretWithLeadingSpace();\n }\n else s5 = peg$FAILED;\n if (s5 !== peg$FAILED) {\n s6 = peg$parseChordFingersDefinition();\n if (s6 === peg$FAILED) s6 = null;\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c2(s1, s3, s5, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordDefinitionName() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseChordDefinitionNameBase();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseChordDefinitionNameBass();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n s2 = [\n s2,\n s3\n ];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseChordDefinitionNameBase() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseChordDefinitionNote();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseChordDefinitionSuffix();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n s2 = [\n s2,\n s3\n ];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseChordDefinitionNameBass() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s2 = peg$c3;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c4);\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseChordDefinitionNote();\n if (s3 !== peg$FAILED) {\n s2 = [\n s2,\n s3\n ];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseChordDefinitionNote() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (peg$c5.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c6);\n }\n if (s2 !== peg$FAILED) {\n if (peg$c7.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c8);\n }\n if (s3 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c9) {\n s3 = peg$c9;\n peg$currPos += 2;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c10);\n }\n if (s3 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 115) {\n s3 = peg$c11;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c12);\n }\n if (s3 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s3 = peg$c13;\n peg$currPos += 2;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c14);\n }\n }\n }\n }\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n s2 = [\n s2,\n s3\n ];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseChordDefinitionSuffix() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n if (peg$c15.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c16);\n }\n if (s2 !== peg$FAILED) while(s2 !== peg$FAILED){\n s1.push(s2);\n if (peg$c15.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c16);\n }\n }\n else s1 = peg$FAILED;\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseBaseFret() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 9) === peg$c17) {\n s1 = peg$c17;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c18);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseFretNumber();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse__();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c19(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordFingersDefinition() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parse__();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c20) {\n s2 = peg$c20;\n peg$currPos += 7;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c21);\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseFingerWithLeadingSpace();\n if (s4 !== peg$FAILED) while(s4 !== peg$FAILED){\n s3.push(s4);\n s4 = peg$parseFingerWithLeadingSpace();\n }\n else s3 = peg$FAILED;\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c22(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseFingerWithLeadingSpace() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parse__();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseFinger();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c23(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseFinger() {\n let s0;\n s0 = peg$parseFingerNumber();\n if (s0 === peg$FAILED) {\n if (peg$c24.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c25);\n }\n }\n return s0;\n }\n function peg$parseFingerNumber() {\n let s0, s1;\n s0 = peg$currPos;\n if (peg$c26.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c27);\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c28(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseFingerLetter() {\n let s0;\n if (peg$c29.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c30);\n }\n return s0;\n }\n function peg$parseNoFingerSetting() {\n let s0;\n if (peg$c31.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c32);\n }\n return s0;\n }\n function peg$parseFretWithLeadingSpace() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parse__();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseFret();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c33(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseFret() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseFretNumber();\n if (s2 === peg$FAILED) {\n s2 = peg$parseOpenFret();\n if (s2 === peg$FAILED) s2 = peg$parseNonSoundingString();\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c33(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseFretNumber() {\n let s0, s1;\n s0 = peg$currPos;\n if (peg$c34.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c35);\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c28(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseOpenFret() {\n let s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 48) {\n s1 = peg$c36;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c37);\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c38();\n }\n s0 = s1;\n return s0;\n }\n function peg$parseNonSoundingString() {\n let s0;\n if (input.substr(peg$currPos, 2) === peg$c39) {\n s0 = peg$c39;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c40);\n }\n if (s0 === peg$FAILED) {\n if (peg$c41.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c42);\n }\n }\n return s0;\n }\n function peg$parse__() {\n let s0, s1;\n peg$silentFails++;\n s0 = [];\n s1 = peg$parseWhitespaceCharacter();\n if (s1 !== peg$FAILED) while(s1 !== peg$FAILED){\n s0.push(s1);\n s1 = peg$parseWhitespaceCharacter();\n }\n else s0 = peg$FAILED;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c43);\n }\n return s0;\n }\n function peg$parse_() {\n let s0, s1;\n peg$silentFails++;\n s0 = [];\n s1 = peg$parseWhitespaceCharacter();\n while(s1 !== peg$FAILED){\n s0.push(s1);\n s1 = peg$parseWhitespaceCharacter();\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c44);\n }\n return s0;\n }\n function peg$parseWhitespaceCharacter() {\n let s0;\n if (peg$c45.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c46);\n }\n return s0;\n }\n function peg$parseSpace() {\n let s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$c48.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c49);\n }\n if (s2 !== peg$FAILED) while(s2 !== peg$FAILED){\n s1.push(s2);\n if (peg$c48.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c49);\n }\n }\n else s1 = peg$FAILED;\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c47);\n }\n return s0;\n }\n function peg$parseNewLine() {\n let s0;\n if (peg$c50.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c51);\n }\n if (s0 === peg$FAILED) s0 = peg$parseCarriageReturnLineFeed();\n return s0;\n }\n function peg$parseCarriageReturnLineFeed() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseCarriageReturn();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseLineFeed();\n if (s2 !== peg$FAILED) {\n s1 = [\n s1,\n s2\n ];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseLineFeed() {\n let s0;\n if (input.charCodeAt(peg$currPos) === 10) {\n s0 = peg$c52;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c53);\n }\n return s0;\n }\n function peg$parseCarriageReturn() {\n let s0;\n if (input.charCodeAt(peg$currPos) === 13) {\n s0 = peg$c54;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c55);\n }\n return s0;\n }\n function peg$parseEscape() {\n let s0;\n if (input.charCodeAt(peg$currPos) === 92) {\n s0 = peg$c56;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c57);\n }\n return s0;\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) return peg$result;\n else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) peg$fail(peg$endExpectation());\n throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n }\n}\nconst $d7af2fe287893822$export$98e6a39c04603d36 = $d7af2fe287893822$var$peg$parse;\n\n\n/**\n * Represents a chord definition.\n *\n * Definitions are made using the `{chord}` or `{define}` directive.\n * A chord definitions overrides a previous chord definition for the exact same chord.\n *\n * @see https://chordpro.org/chordpro/directives-define/\n * @see https://chordpro.org/chordpro/directives-chord/\n */ class $9fb93292861ee876$var$ChordDefinition {\n constructor(name, baseFret, frets, fingers){\n this.name = name;\n this.baseFret = baseFret;\n this.frets = frets;\n this.fingers = fingers || [];\n }\n /**\n * Parses a chord definition in the form of:\n * - base-fret frets \n * - base-fret frets fingers \n * @param chordDefinition\n * @returns {ChordDefinition}\n * @see https://chordpro.org/chordpro/directives-define/#common-usage\n */ static parse(chordDefinition) {\n const { name: name, baseFret: baseFret, frets: frets, fingers: fingers } = (0, $d7af2fe287893822$export$98e6a39c04603d36)(chordDefinition.trim());\n return new $9fb93292861ee876$var$ChordDefinition(name, baseFret, frets, fingers);\n }\n clone() {\n return new $9fb93292861ee876$var$ChordDefinition(this.name, this.baseFret, [\n ...this.frets\n ], [\n ...this.fingers\n ]);\n }\n}\nvar $9fb93292861ee876$export$2e2bcd8739ae039 = $9fb93292861ee876$var$ChordDefinition;\n\n\n\n\nconst $d195682178d1ec30$export$a014e67b549cbef4 = {\n separator: ','\n};\nclass $d195682178d1ec30$var$MetadataConfiguration {\n constructor(metadataConfiguration = {}){\n this.separator = metadataConfiguration.separator || $d195682178d1ec30$export$a014e67b549cbef4.separator;\n }\n}\nvar $d195682178d1ec30$export$2e2bcd8739ae039 = $d195682178d1ec30$var$MetadataConfiguration;\n\n\nclass $c8d24aa77565e86d$var$InstrumentConfiguration {\n constructor(instrumentConfiguration = {}){\n this.type = instrumentConfiguration.type;\n this.description = instrumentConfiguration.description;\n }\n}\nvar $c8d24aa77565e86d$export$2e2bcd8739ae039 = $c8d24aa77565e86d$var$InstrumentConfiguration;\n\n\nclass $0817420247ff1958$var$UserConfiguration {\n constructor(userConfiguration = {}){\n this.name = userConfiguration.name;\n this.fullname = userConfiguration.fullname;\n }\n}\nvar $0817420247ff1958$export$2e2bcd8739ae039 = $0817420247ff1958$var$UserConfiguration;\n\n\nconst $5f5759837fa40df2$export$f152539e8297cacc = (string)=>string;\nconst $5f5759837fa40df2$export$78c0028a34264234 = {\n evaluate: false,\n metadata: (0, $d195682178d1ec30$export$a014e67b549cbef4),\n key: null,\n expandChorusDirective: false,\n useUnicodeModifiers: false,\n normalizeChords: true,\n delegates: {\n abc: $5f5759837fa40df2$export$f152539e8297cacc,\n ly: $5f5759837fa40df2$export$f152539e8297cacc,\n tab: $5f5759837fa40df2$export$f152539e8297cacc,\n grid: $5f5759837fa40df2$export$f152539e8297cacc\n }\n};\nclass $5f5759837fa40df2$var$Configuration {\n get metadataSeparator() {\n return this.metadata.separator ?? '';\n }\n constructor(configuration = $5f5759837fa40df2$export$78c0028a34264234){\n const mergedConfig = {\n ...$5f5759837fa40df2$export$78c0028a34264234,\n ...configuration\n };\n this.evaluate = mergedConfig.evaluate;\n this.expandChorusDirective = mergedConfig.expandChorusDirective;\n this.useUnicodeModifiers = mergedConfig.useUnicodeModifiers;\n this.normalizeChords = mergedConfig.normalizeChords;\n this.metadata = new (0, $d195682178d1ec30$export$2e2bcd8739ae039)(configuration.metadata);\n this.key = configuration.key ? (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).wrap(configuration.key) : null;\n this.delegates = {\n ...$5f5759837fa40df2$export$78c0028a34264234.delegates,\n ...configuration.delegates\n };\n this.instrument = configuration.instrument ? new (0, $c8d24aa77565e86d$export$2e2bcd8739ae039)(configuration.instrument) : undefined;\n this.user = configuration.user ? new (0, $0817420247ff1958$export$2e2bcd8739ae039)(configuration.user) : undefined;\n this.decapo = !!configuration.decapo;\n }\n}\nvar $5f5759837fa40df2$export$2e2bcd8739ae039 = $5f5759837fa40df2$var$Configuration;\n\n\n/**\n * Base class for all formatters, taking care of receiving a configuration wrapping that inside a Configuration object\n */ class $750c574c15888689$var$Formatter {\n /**\n * Instantiate\n * @param {Object} [configuration={}] options\n * @param {boolean} [configuration.evaluate=false] Whether or not to evaluate meta expressions.\n * For more info about meta expressions, see: https://bit.ly/2SC9c2u\n * @param {object} [configuration.metadata={}]\n * @param {string} [configuration.metadata.separator=\", \"] The separator to be used when rendering a\n * metadata value that has multiple values. See: https://bit.ly/2SC9c2u\n * @param {Key|string} [configuration.key=null] The key to use for rendering. The chord sheet will be\n * transposed from the song's original key (as indicated by the `{key}` directive) to the specified key.\n * Note that transposing will only work if the original song key is set.\n * @param {boolean} [configuration.expandChorusDirective=false] Whether or not to expand `{chorus}` directives\n * by rendering the last defined chorus inline after the directive.\n * @param {boolean} [configuration.useUnicodeModifiers=false] Whether or not to use unicode flat and sharp\n * symbols.\n * @param {boolean} [configuration.normalizeChords=true] Whether or not to automatically normalize chords\n */ constructor(configuration = {}){\n this.configuration = new (0, $5f5759837fa40df2$export$2e2bcd8739ae039)(configuration || {});\n }\n}\nvar $750c574c15888689$export$2e2bcd8739ae039 = $750c574c15888689$var$Formatter;\n\n\n/**\n * Album meta directive. See https://www.chordpro.org/chordpro/directives-album/\n * @type {string}\n */ class $9be84d5515dccc21$var$AstComponent {\n constructor(traceInfo = null){\n this.line = null;\n this.column = null;\n this.offset = null;\n if (traceInfo) {\n this.line = traceInfo.line || null;\n this.column = traceInfo.column || null;\n this.offset = traceInfo.offset || null;\n }\n }\n}\nvar $9be84d5515dccc21$export$2e2bcd8739ae039 = $9be84d5515dccc21$var$AstComponent;\n\n\n\nconst $b58c551853385714$export$10227cb086d1770c = 'album';\nconst $b58c551853385714$export$585ac316350d4927 = 'arranger';\nconst $b58c551853385714$export$17d8dfb3db842bf = 'artist';\nconst $b58c551853385714$export$866f445d49bad88e = 'capo';\nconst $b58c551853385714$export$a29989082612d0d9 = 'comment';\nconst $b58c551853385714$export$98424633dc8c377f = 'composer';\nconst $b58c551853385714$export$4ab8c75045d12480 = 'copyright';\nconst $b58c551853385714$export$bacc88974c736870 = 'duration';\nconst $b58c551853385714$export$37c7b13f53af2469 = 'end_of_abc';\nconst $b58c551853385714$export$1c874e9780385ecd = 'end_of_bridge';\nconst $b58c551853385714$export$473c1a4819e5180b = 'end_of_chorus';\nconst $b58c551853385714$export$4b28ac1ae75aff60 = 'end_of_grid';\nconst $b58c551853385714$export$e3f6cdbd95b1f8f = 'end_of_ly';\nconst $b58c551853385714$export$66a0ef3ffeab32b7 = 'end_of_tab';\nconst $b58c551853385714$export$640d294ab83f9040 = 'end_of_verse';\nconst $b58c551853385714$export$7167c830cefcb6b5 = 'key';\nconst $b58c551853385714$export$430b1920f5feeae = '_key';\nconst $b58c551853385714$export$a6901bd008617c61 = 'lyricist';\nconst $b58c551853385714$export$a1aa5ca2f265ee7f = 'sorttitle';\nconst $b58c551853385714$export$9e9edc166b8d0233 = 'start_of_abc';\nconst $b58c551853385714$export$3550cc87694d54e0 = 'start_of_bridge';\nconst $b58c551853385714$export$4f5168acae064e01 = 'start_of_chorus';\nconst $b58c551853385714$export$b7e6dcd848b88f43 = 'start_of_grid';\nconst $b58c551853385714$export$634ff7795b596e62 = 'start_of_ly';\nconst $b58c551853385714$export$8dd1111100e0e88d = 'start_of_tab';\nconst $b58c551853385714$export$deca399f8cd9b7dc = 'start_of_verse';\nconst $b58c551853385714$export$5895c693c74b9cf4 = 'subtitle';\nconst $b58c551853385714$export$bd8d57d0bc5a8478 = 'tempo';\nconst $b58c551853385714$export$a9905336c0111a3a = 'time';\nconst $b58c551853385714$export$f1e53f710478ceb4 = 'title';\nconst $b58c551853385714$export$ae60ab9b4739fc3d = 'transpose';\nconst $b58c551853385714$export$b7627374a6424f68 = 'new_key';\nconst $b58c551853385714$export$90b88dc425a06a95 = 'year';\nconst $b58c551853385714$export$2b0cbe6e95114098 = 'chordfont';\nconst $b58c551853385714$export$1f62a95bf5703cac = 'chordsize';\nconst $b58c551853385714$export$f7227d9f34d97bec = 'chordcolour';\nconst $b58c551853385714$export$14fe4ba6e94df04d = 'textfont';\nconst $b58c551853385714$export$f0dee7f48597f09a = 'textsize';\nconst $b58c551853385714$export$d2ed2b49c006eb23 = 'textcolour';\nconst $b58c551853385714$export$7e71e3df83ac1c9b = 'titlefont';\nconst $b58c551853385714$export$6adbad8fc3f3d0e2 = 'titlesize';\nconst $b58c551853385714$export$964db987ba9b8470 = 'titlecolour';\nconst $b58c551853385714$export$8db6c706fc9142b2 = 'chorus';\nconst $b58c551853385714$export$d8cbdf44b1f66df1 = 'chord_style';\nconst $b58c551853385714$var$CHORDFONT_SHORT = 'cf';\nconst $b58c551853385714$var$CHORDSIZE_SHORT = 'cs';\nconst $b58c551853385714$var$COMMENT_SHORT = 'c';\nconst $b58c551853385714$var$END_OF_BRIDGE_SHORT = 'eob';\nconst $b58c551853385714$var$END_OF_CHORUS_SHORT = 'eoc';\nconst $b58c551853385714$var$END_OF_GRID_SHORT = 'eog';\nconst $b58c551853385714$var$END_OF_TAB_SHORT = 'eot';\nconst $b58c551853385714$var$END_OF_VERSE_SHORT = 'eov';\nconst $b58c551853385714$var$NEW_KEY_SHORT = 'nk';\nconst $b58c551853385714$var$START_OF_BRIDGE_SHORT = 'sob';\nconst $b58c551853385714$var$START_OF_CHORUS_SHORT = 'soc';\nconst $b58c551853385714$var$START_OF_GRID_SHORT = 'sog';\nconst $b58c551853385714$var$START_OF_TAB_SHORT = 'sot';\nconst $b58c551853385714$var$START_OF_VERSE_SHORT = 'sov';\nconst $b58c551853385714$var$SUBTITLE_SHORT = 'st';\nconst $b58c551853385714$var$TEXTFONT_SHORT = 'tf';\nconst $b58c551853385714$var$TEXTSIZE_SHORT = 'ts';\nconst $b58c551853385714$var$TITLE_SHORT = 't';\nconst $b58c551853385714$var$RENDERABLE_TAGS = [\n $b58c551853385714$export$a29989082612d0d9\n];\nconst $b58c551853385714$export$57ecf0dc09effb3 = [\n $b58c551853385714$export$10227cb086d1770c,\n $b58c551853385714$export$585ac316350d4927,\n $b58c551853385714$export$17d8dfb3db842bf,\n $b58c551853385714$export$866f445d49bad88e,\n $b58c551853385714$export$d8cbdf44b1f66df1,\n $b58c551853385714$export$98424633dc8c377f,\n $b58c551853385714$export$4ab8c75045d12480,\n $b58c551853385714$export$bacc88974c736870,\n $b58c551853385714$export$7167c830cefcb6b5,\n $b58c551853385714$export$a6901bd008617c61,\n $b58c551853385714$export$a1aa5ca2f265ee7f,\n $b58c551853385714$export$5895c693c74b9cf4,\n $b58c551853385714$export$bd8d57d0bc5a8478,\n $b58c551853385714$export$a9905336c0111a3a,\n $b58c551853385714$export$f1e53f710478ceb4,\n $b58c551853385714$export$90b88dc425a06a95\n];\nconst $b58c551853385714$export$75d737e15c3fab80 = [\n $b58c551853385714$export$430b1920f5feeae\n];\nconst $b58c551853385714$var$INLINE_FONT_TAGS = [\n $b58c551853385714$export$2b0cbe6e95114098,\n $b58c551853385714$export$1f62a95bf5703cac,\n $b58c551853385714$export$f7227d9f34d97bec,\n $b58c551853385714$export$14fe4ba6e94df04d,\n $b58c551853385714$export$f0dee7f48597f09a,\n $b58c551853385714$export$d2ed2b49c006eb23\n];\nconst $b58c551853385714$var$DIRECTIVES_WITH_RENDERABLE_LABEL = [\n $b58c551853385714$export$8db6c706fc9142b2\n];\nconst $b58c551853385714$var$ALIASES = {\n [$b58c551853385714$var$CHORDFONT_SHORT]: $b58c551853385714$export$2b0cbe6e95114098,\n [$b58c551853385714$var$CHORDSIZE_SHORT]: $b58c551853385714$export$1f62a95bf5703cac,\n [$b58c551853385714$var$COMMENT_SHORT]: $b58c551853385714$export$a29989082612d0d9,\n [$b58c551853385714$var$END_OF_BRIDGE_SHORT]: $b58c551853385714$export$1c874e9780385ecd,\n [$b58c551853385714$var$END_OF_CHORUS_SHORT]: $b58c551853385714$export$473c1a4819e5180b,\n [$b58c551853385714$var$END_OF_GRID_SHORT]: $b58c551853385714$export$4b28ac1ae75aff60,\n [$b58c551853385714$var$END_OF_TAB_SHORT]: $b58c551853385714$export$66a0ef3ffeab32b7,\n [$b58c551853385714$var$END_OF_VERSE_SHORT]: $b58c551853385714$export$640d294ab83f9040,\n [$b58c551853385714$var$NEW_KEY_SHORT]: $b58c551853385714$export$b7627374a6424f68,\n [$b58c551853385714$var$START_OF_BRIDGE_SHORT]: $b58c551853385714$export$3550cc87694d54e0,\n [$b58c551853385714$var$START_OF_CHORUS_SHORT]: $b58c551853385714$export$4f5168acae064e01,\n [$b58c551853385714$var$START_OF_GRID_SHORT]: $b58c551853385714$export$b7e6dcd848b88f43,\n [$b58c551853385714$var$START_OF_TAB_SHORT]: $b58c551853385714$export$8dd1111100e0e88d,\n [$b58c551853385714$var$START_OF_VERSE_SHORT]: $b58c551853385714$export$deca399f8cd9b7dc,\n [$b58c551853385714$var$SUBTITLE_SHORT]: $b58c551853385714$export$5895c693c74b9cf4,\n [$b58c551853385714$var$TEXTFONT_SHORT]: $b58c551853385714$export$14fe4ba6e94df04d,\n [$b58c551853385714$var$TEXTSIZE_SHORT]: $b58c551853385714$export$f0dee7f48597f09a,\n [$b58c551853385714$var$TITLE_SHORT]: $b58c551853385714$export$f1e53f710478ceb4\n};\nconst $b58c551853385714$var$TAG_REGEX = /^([^:\\s]+)(:?\\s*(.+))?$/;\nconst $b58c551853385714$var$CUSTOM_META_TAG_NAME_REGEX = /^x_(.+)$/;\nconst $b58c551853385714$var$START_TAG_TO_SECTION_TYPE = {\n [$b58c551853385714$export$9e9edc166b8d0233]: (0, $72b24102c7d826fd$export$92249c36c213e508),\n [$b58c551853385714$export$3550cc87694d54e0]: (0, $72b24102c7d826fd$export$78d8c50e853acd10),\n [$b58c551853385714$export$4f5168acae064e01]: $b58c551853385714$export$8db6c706fc9142b2,\n [$b58c551853385714$export$b7e6dcd848b88f43]: (0, $72b24102c7d826fd$export$e2b0b9a5e613f348),\n [$b58c551853385714$export$634ff7795b596e62]: (0, $72b24102c7d826fd$export$6a5a2eab72b6e3d),\n [$b58c551853385714$export$8dd1111100e0e88d]: (0, $72b24102c7d826fd$export$f1c9dd0f5207dd5e),\n [$b58c551853385714$export$deca399f8cd9b7dc]: (0, $72b24102c7d826fd$export$4b194284baed1659)\n};\nconst $b58c551853385714$var$END_TAG_TO_SECTION_TYPE = {\n [$b58c551853385714$export$37c7b13f53af2469]: (0, $72b24102c7d826fd$export$92249c36c213e508),\n [$b58c551853385714$export$1c874e9780385ecd]: (0, $72b24102c7d826fd$export$78d8c50e853acd10),\n [$b58c551853385714$export$473c1a4819e5180b]: $b58c551853385714$export$8db6c706fc9142b2,\n [$b58c551853385714$export$4b28ac1ae75aff60]: (0, $72b24102c7d826fd$export$e2b0b9a5e613f348),\n [$b58c551853385714$export$e3f6cdbd95b1f8f]: (0, $72b24102c7d826fd$export$6a5a2eab72b6e3d),\n [$b58c551853385714$export$66a0ef3ffeab32b7]: (0, $72b24102c7d826fd$export$f1c9dd0f5207dd5e),\n [$b58c551853385714$export$640d294ab83f9040]: (0, $72b24102c7d826fd$export$4b194284baed1659)\n};\nconst $b58c551853385714$export$dfea9b8ecbbb8623 = 'start_tag';\nconst $b58c551853385714$export$3d329a2c209fbc28 = 'end_tag';\nconst $b58c551853385714$var$SECTION_START_REGEX = /^start_of_(.+)$/;\nconst $b58c551853385714$var$SECTION_END_REGEX = /^end_of_(.+)$/;\nfunction $b58c551853385714$export$3ef04055cb4a269a(tagName) {\n return $b58c551853385714$export$75d737e15c3fab80.includes(tagName);\n}\nconst $b58c551853385714$var$translateTagNameAlias = (name)=>{\n if (!name) return name;\n const sanitizedName = name.trim();\n if (sanitizedName in $b58c551853385714$var$ALIASES) return $b58c551853385714$var$ALIASES[sanitizedName];\n return sanitizedName;\n};\n/**\n * Represents a tag/directive. See https://www.chordpro.org/chordpro/chordpro-directives/\n */ class $b58c551853385714$var$Tag extends (0, $9be84d5515dccc21$export$2e2bcd8739ae039) {\n constructor(name, value = null, traceInfo = null, attributes = {}, selector = null, isNegated = false){\n super(traceInfo), this._isMetaTag = false, this._originalName = '', this._name = '', this._value = '', this.selector = null, this.isNegated = false, /**\n * The tag attributes. For example, section related tags can have a label:\n * `{start_of_verse: label=\"Verse 1\"}`\n * @type {Record}\n */ this.attributes = {};\n this.parseNameValue(name, value);\n this.attributes = attributes;\n this.selector = selector;\n this.isNegated = isNegated;\n }\n parseNameValue(name, value) {\n if (name === 'meta') this.parseMetaTag(value);\n else {\n this.name = name;\n this.value = value || '';\n }\n }\n parseMetaTag(value) {\n if (!value) throw new Error('Expected value');\n const [metaName, metaValue] = value.split(/\\s(.+)/);\n this.name = metaName;\n this.value = metaValue || '';\n this._isMetaTag = true;\n }\n static parse(tag) {\n if (tag instanceof $b58c551853385714$var$Tag) return tag;\n return this.parseWithRegex(tag, $b58c551853385714$var$TAG_REGEX);\n }\n static parseWithRegex(tag, regex) {\n const matches = tag.match(regex);\n if (matches !== null) return new $b58c551853385714$var$Tag(matches[1], matches[3] || null);\n return null;\n }\n static parseOrFail(tag) {\n const parsed = this.parse(tag);\n if (!parsed) throw new Error(`Failed to parse ${tag}`);\n return parsed;\n }\n static recognizeSectionTag(tagName) {\n if (tagName in $b58c551853385714$var$START_TAG_TO_SECTION_TYPE) return [\n $b58c551853385714$export$dfea9b8ecbbb8623,\n $b58c551853385714$var$START_TAG_TO_SECTION_TYPE[tagName]\n ];\n if (tagName in $b58c551853385714$var$END_TAG_TO_SECTION_TYPE) return [\n $b58c551853385714$export$3d329a2c209fbc28,\n $b58c551853385714$var$END_TAG_TO_SECTION_TYPE[tagName]\n ];\n const parseStartResult = $b58c551853385714$var$SECTION_START_REGEX.exec(tagName);\n if (parseStartResult) return [\n $b58c551853385714$export$dfea9b8ecbbb8623,\n parseStartResult[1]\n ];\n const parseEndResult = $b58c551853385714$var$SECTION_END_REGEX.exec(tagName);\n if (parseEndResult) return [\n $b58c551853385714$export$3d329a2c209fbc28,\n parseEndResult[1]\n ];\n return [\n null,\n null\n ];\n }\n get label() {\n const labelAttribute = this.attributes.label;\n if (labelAttribute && labelAttribute.length > 0) return labelAttribute;\n return this.value || '';\n }\n isSectionDelimiter() {\n return this.isSectionStart() || this.isSectionEnd();\n }\n isSectionStart() {\n const [tagType] = $b58c551853385714$var$Tag.recognizeSectionTag(this.name);\n return tagType === $b58c551853385714$export$dfea9b8ecbbb8623;\n }\n isSectionEnd() {\n const [tagType] = $b58c551853385714$var$Tag.recognizeSectionTag(this.name);\n return tagType === $b58c551853385714$export$3d329a2c209fbc28;\n }\n isInlineFontTag() {\n return $b58c551853385714$var$INLINE_FONT_TAGS.includes(this.name);\n }\n set name(name) {\n this._name = $b58c551853385714$var$translateTagNameAlias(name);\n this._originalName = name;\n }\n /**\n * The tag full name. When the original tag used the short name, `name` will return the full name.\n * @member\n * @type {string}\n */ get name() {\n return this._name.trim();\n }\n /**\n * The original tag name that was used to construct the tag.\n * @member\n * @type {string}\n */ get originalName() {\n return this._originalName.trim();\n }\n set value(value) {\n this._value = value || '';\n }\n /**\n * The tag value\n * @member\n * @type {string}\n */ get value() {\n return `${this._value}`.trim();\n }\n /**\n * Checks whether the tag value is a non-empty string.\n * @returns {boolean}\n */ hasValue() {\n return this.value.length > 0;\n }\n hasAttributes() {\n return Object.keys(this.attributes).length > 0;\n }\n hasLabel() {\n return this.label.length > 0;\n }\n /**\n * Checks whether the tag is usually rendered inline. It currently only applies to comment tags.\n * @returns {boolean}\n */ isRenderable() {\n return $b58c551853385714$var$RENDERABLE_TAGS.includes(this.name) || this.hasRenderableLabel();\n }\n /**\n * Check whether this tag's label (if any) should be rendered, as applicable to tags like\n * `start_of_verse` and `start_of_chorus`.\n * See https://chordpro.org/chordpro/directives-env_chorus/, https://chordpro.org/chordpro/directives-env_verse/,\n * https://chordpro.org/chordpro/directives-env_bridge/, https://chordpro.org/chordpro/directives-env_tab/\n */ hasRenderableLabel() {\n return ($b58c551853385714$var$DIRECTIVES_WITH_RENDERABLE_LABEL.includes(this.name) || this.isSectionStart()) && this.hasLabel();\n }\n /**\n * Checks whether the tag is either a standard meta tag or a custom meta directive (`{x_some_name}`)\n * @returns {boolean}\n */ isMetaTag() {\n return this._isMetaTag || $b58c551853385714$var$CUSTOM_META_TAG_NAME_REGEX.test(this.name) || $b58c551853385714$export$57ecf0dc09effb3.indexOf(this.name) !== -1;\n }\n /**\n * Returns a clone of the tag.\n * @returns {Tag} The cloned tag\n */ clone() {\n return new $b58c551853385714$var$Tag(this._originalName, this.value, null, this.attributes);\n }\n toString() {\n return `Tag(name=${this.name}, value=${this.value})`;\n }\n set({ value: value }) {\n return new $b58c551853385714$var$Tag(this._originalName, value, null, this.attributes);\n }\n setAttribute(name, value) {\n return new $b58c551853385714$var$Tag(this._originalName, this.value, null, {\n ...this.attributes,\n [name]: value\n });\n }\n}\nvar $b58c551853385714$export$2e2bcd8739ae039 = $b58c551853385714$var$Tag;\n\n\n\nclass $99541d8b5a9b61aa$var$EvaluationError extends Error {\n constructor(message, line = null, column = null, offset = null){\n super(`${message} on line ${line} column ${column}`), this.line = null, this.column = null, this.offset = null;\n this.name = 'ExpressionError';\n this.line = line;\n this.column = column;\n this.offset = offset;\n }\n}\nvar $99541d8b5a9b61aa$export$2e2bcd8739ae039 = $99541d8b5a9b61aa$var$EvaluationError;\n\n\n\n\nclass $82faf91a3bf88652$var$Evaluatable extends (0, $9be84d5515dccc21$export$2e2bcd8739ae039) {\n}\nvar $82faf91a3bf88652$export$2e2bcd8739ae039 = $82faf91a3bf88652$var$Evaluatable;\n\n\nclass $6191763894f0be63$var$Composite extends (0, $82faf91a3bf88652$export$2e2bcd8739ae039) {\n constructor(expressions, variable = null){\n super(), this.expressions = [];\n this.expressions = expressions;\n this.variable = variable;\n }\n evaluate(metadata, metadataSeparator) {\n return this.expressions.map((expression)=>expression.evaluate(metadata, metadataSeparator, this.variable)).join('');\n }\n isRenderable() {\n return true;\n }\n clone() {\n return new $6191763894f0be63$var$Composite(this.expressions.map((expression)=>expression.clone()), this.variable);\n }\n}\nvar $6191763894f0be63$export$2e2bcd8739ae039 = $6191763894f0be63$var$Composite;\n\n\n\nclass $4afcde69e7cb3e85$var$Ternary extends (0, $82faf91a3bf88652$export$2e2bcd8739ae039) {\n constructor({ variable: variable = null, valueTest: valueTest = null, trueExpression: trueExpression = [], falseExpression: falseExpression = [], line: line = null, column: column = null, offset: offset = null }){\n super({\n line: line,\n column: column,\n offset: offset\n }), this.trueExpression = [], this.falseExpression = [];\n this.variable = variable || null;\n this.valueTest = valueTest || null;\n this.trueExpression = trueExpression;\n this.falseExpression = falseExpression;\n }\n /**\n * Evaluate the meta expression\n * @param {Metadata} metadata The metadata object to use for evaluating the expression\n * @param {string} [metadataSeparator=null] The metadata separator to use if necessary\n * @returns {string} The evaluated expression\n */ evaluate(metadata, metadataSeparator, upperContext = null) {\n if (this.variable) return this.evaluateWithVariable(metadata, metadataSeparator);\n if (!upperContext) throw new (0, $99541d8b5a9b61aa$export$2e2bcd8739ae039)('Unexpected empty expression', this.line, this.column, this.offset);\n return this.evaluateToString(metadata.get(upperContext) || '', metadataSeparator);\n }\n evaluateToString(value, metadataSeparator) {\n if (Array.isArray(value)) return value.join(metadataSeparator);\n return value;\n }\n evaluateWithVariable(metadata, metadataSeparator) {\n if (!this.variable) throw new Error('Expected this.variable to be present');\n const value = metadata.get(this.variable);\n if (value && ((0, $f52913d8767c6236$export$78d1711480f95c3e)(this.valueTest) || value === this.valueTest)) return this.evaluateForTruthyValue(metadata, metadataSeparator, value);\n if (this.falseExpression.length) return new (0, $6191763894f0be63$export$2e2bcd8739ae039)(this.falseExpression, this.variable).evaluate(metadata, metadataSeparator);\n return '';\n }\n evaluateForTruthyValue(metadata, metadataSeparator, value) {\n if (this.trueExpression.length) return new (0, $6191763894f0be63$export$2e2bcd8739ae039)(this.trueExpression, this.variable).evaluate(metadata, metadataSeparator);\n return this.evaluateToString(value, metadataSeparator);\n }\n isRenderable() {\n return true;\n }\n clone() {\n return new $4afcde69e7cb3e85$var$Ternary({\n variable: this.variable,\n valueTest: this.valueTest,\n trueExpression: this.trueExpression.map((part)=>part.clone()),\n falseExpression: this.falseExpression.map((part)=>part.clone()),\n line: this.line,\n column: this.column,\n offset: this.offset\n });\n }\n}\nvar $4afcde69e7cb3e85$export$2e2bcd8739ae039 = $4afcde69e7cb3e85$var$Ternary;\n\n\n\nclass $34ab5875df061287$var$Literal extends (0, $82faf91a3bf88652$export$2e2bcd8739ae039) {\n constructor(string){\n super();\n this.string = string;\n }\n evaluate() {\n return this.string;\n }\n isRenderable() {\n return true;\n }\n clone() {\n return new $34ab5875df061287$var$Literal(this.string);\n }\n}\nvar $34ab5875df061287$export$2e2bcd8739ae039 = $34ab5875df061287$var$Literal;\n\n\n/**\n * Represents a comment. See https://www.chordpro.org/chordpro/chordpro-file-format-specification/#overview\n */ class $acbb1127ce68c11a$var$Comment {\n constructor(content){\n this.content = content;\n }\n /**\n * Indicates whether a Comment should be visible in a formatted chord sheet (except for ChordPro sheets)\n * @returns {boolean}\n */ isRenderable() {\n return false;\n }\n /**\n * Returns a deep copy of the Comment, useful when programmatically transforming a song\n * @returns {Comment}\n */ clone() {\n return new $acbb1127ce68c11a$var$Comment(this.content);\n }\n toString() {\n return `Comment(content=${this.content})`;\n }\n}\nvar $acbb1127ce68c11a$export$2e2bcd8739ae039 = $acbb1127ce68c11a$var$Comment;\n\n\nclass $4c3a42e9543eea65$var$SoftLineBreak {\n clone() {\n return new $4c3a42e9543eea65$var$SoftLineBreak();\n }\n}\nvar $4c3a42e9543eea65$export$2e2bcd8739ae039 = $4c3a42e9543eea65$var$SoftLineBreak;\n\n\n\n/**\n * Formats a song into a ChordPro chord sheet\n */ class $fe0c6f4316da78b0$var$ChordProFormatter extends (0, $750c574c15888689$export$2e2bcd8739ae039) {\n /**\n * Formats a song into a ChordPro chord sheet.\n * @param {Song} song The song to be formatted\n * @returns {string} The ChordPro string\n */ format(song) {\n const { lines: lines, metadata: metadata } = song;\n return lines.map((line)=>this.formatLine(line, metadata)).join('\\n');\n }\n formatLine(line, metadata) {\n return line.items.map((item)=>this.formatItem(item, metadata)).join('');\n }\n formatItem(item, metadata) {\n if (item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039)) return this.formatTag(item);\n if (item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039)) return this.formatChordLyricsPair(item);\n if (item instanceof (0, $acbb1127ce68c11a$export$2e2bcd8739ae039)) return this.formatComment(item);\n if (item instanceof (0, $4c3a42e9543eea65$export$2e2bcd8739ae039)) return '\\\\ ';\n if ('evaluate' in item) return this.formatOrEvaluateItem(item, metadata);\n throw new Error(`Don't know how to format a ${item}`);\n }\n formatOrEvaluateItem(item, metadata) {\n if (this.configuration.evaluate) return item.evaluate(metadata, this.configuration.metadataSeparator);\n if (item instanceof (0, $4afcde69e7cb3e85$export$2e2bcd8739ae039)) return this.formatTernary(item);\n if (item instanceof (0, $34ab5875df061287$export$2e2bcd8739ae039)) return item.evaluate();\n throw new Error(`Don't know how to format a ${item.constructor.name}`);\n }\n formatTernary(ternary) {\n const { variable: variable, valueTest: valueTest, trueExpression: trueExpression, falseExpression: falseExpression } = ternary;\n return [\n '%{',\n variable || '',\n this.formatValueTest(valueTest),\n this.formatExpressionRange(trueExpression),\n this.formatExpressionRange(falseExpression),\n '}'\n ].join('');\n }\n formatValueTest(valueTest) {\n if (!valueTest) return '';\n return `=${valueTest}`;\n }\n formatExpressionRange(expressionRange) {\n if (!expressionRange.length) return '';\n return `|${expressionRange.map((expression)=>this.formatExpression(expression)).join('')}`;\n }\n formatExpression(expression) {\n if (expression instanceof (0, $4afcde69e7cb3e85$export$2e2bcd8739ae039)) return this.formatTernary(expression);\n if (expression instanceof (0, $34ab5875df061287$export$2e2bcd8739ae039)) return expression.string;\n return '';\n }\n formatTag(tag) {\n if (tag.hasAttributes()) return `{${tag.originalName}: ${this.formatTagAttributes(tag)}}`;\n if (tag.hasValue()) return `{${tag.originalName}: ${tag.value}}`;\n return `{${tag.originalName}}`;\n }\n formatTagAttributes(tag) {\n const keys = Object.keys(tag.attributes);\n if (keys.length === 0) return '';\n return keys.map((key)=>`${key}=\"${tag.attributes[key]}\"`).join(' ');\n }\n formatChordLyricsPair(chordLyricsPair) {\n return [\n this.formatChordLyricsPairChords(chordLyricsPair),\n this.formatChordLyricsPairLyrics(chordLyricsPair)\n ].join('');\n }\n formatChordLyricsPairChords(chordLyricsPair) {\n if (chordLyricsPair.chords) {\n const renderedChord = (0, $f0449e2486cb2372$export$2e2bcd8739ae039).parse(chordLyricsPair.chords);\n if (!renderedChord) return `[${chordLyricsPair.chords}]`;\n const normalizedChord = this.configuration.normalizeChords ? renderedChord.normalize() : renderedChord;\n return `[${normalizedChord}]`;\n }\n if (chordLyricsPair.annotation) return `[*${chordLyricsPair.annotation}]`;\n return '';\n }\n formatChordLyricsPairLyrics(chordLyricsPair) {\n return chordLyricsPair.lyrics || '';\n }\n formatComment(comment) {\n return `#${comment.content}`;\n }\n}\nvar $fe0c6f4316da78b0$export$2e2bcd8739ae039 = $fe0c6f4316da78b0$var$ChordProFormatter;\n\n\nfunction $1582051153255182$var$splitSectionContent(content) {\n return content.replace(/\\n$/, '').split('\\n');\n}\nfunction $1582051153255182$export$45986ccf08e93b0b(items) {\n return {\n type: 'line',\n items: items\n };\n}\nfunction $1582051153255182$export$665e0f4515a68234(startTag, endTag, content) {\n return [\n $1582051153255182$export$45986ccf08e93b0b([\n startTag\n ]),\n ...$1582051153255182$var$splitSectionContent(content).map((line)=>$1582051153255182$export$45986ccf08e93b0b([\n line\n ])),\n $1582051153255182$export$45986ccf08e93b0b([\n endTag\n ])\n ];\n}\nfunction $1582051153255182$export$4478cda40be33ba2(name, value, selector, location) {\n return {\n type: 'tag',\n name: name,\n location: location.start,\n value: value?.value || '',\n attributes: value?.attributes || {},\n selector: selector?.value,\n isNegated: selector?.isNegated\n };\n}\nfunction $1582051153255182$export$4bae24da7c5e47c7(string, search, replaceMatch, replaceRest = (subString)=>subString) {\n const regExp = new RegExp(search, 'g');\n const occurrences = Array.from(string.matchAll(regExp));\n const result = [];\n let index = 0;\n occurrences.forEach((match)=>{\n const before = string.slice(index, match.index);\n if (before !== '') result.push(replaceRest(before));\n result.push(replaceMatch(match[0]));\n index = match.index + match[0].length;\n });\n const rest = string.slice(index);\n if (rest !== '') result.push(replaceRest(rest));\n return result;\n}\nfunction $1582051153255182$export$bb6f5ab929ea49e7(lyrics) {\n return $1582051153255182$export$4bae24da7c5e47c7(lyrics, '\\xa0', ()=>({\n type: 'softLineBreak'\n }), (lyric)=>({\n type: 'chordLyricsPair',\n chords: '',\n lyrics: lyric\n }));\n}\nfunction $1582051153255182$export$54f22f5279737844(chords, lyrics) {\n const pairs = $1582051153255182$export$bb6f5ab929ea49e7(lyrics || '');\n const [_first, ...rest] = pairs;\n let first = pairs[0];\n let addedLeadingChord = null;\n if (chords !== '') {\n if (!first || first.type === 'softLineBreak') addedLeadingChord = {\n type: 'chordLyricsPair',\n chords: chords,\n lyrics: ''\n };\n else first = {\n ...first,\n chords: chords\n };\n }\n return [\n addedLeadingChord,\n first || null,\n ...rest\n ].filter((item)=>item !== null);\n}\nfunction $1582051153255182$var$isChordLyricsPair(item) {\n return typeof item !== 'string' && item.type === 'chordLyricsPair';\n}\nfunction $1582051153255182$var$combinableChordLyricsPairs(itemA, itemB) {\n return $1582051153255182$var$isChordLyricsPair(itemA) && $1582051153255182$var$isChordLyricsPair(itemB) && itemA.chords.length > 0 && itemB.chords.length === 0;\n}\nfunction $1582051153255182$export$ce8f3be11402ed10(items, chopFirstWord) {\n if (chopFirstWord !== false) return items;\n const combinedItems = [];\n for(let i = 0, { length: length } = items; i < length; i += 1)if ($1582051153255182$var$combinableChordLyricsPairs(items[i], items[i + 1])) {\n const item = items[i];\n const nextItem = items[i + 1];\n combinedItems.push({\n ...item,\n lyrics: `${item.lyrics}${nextItem.lyrics}`\n });\n i += 1;\n } else combinedItems.push(items[i]);\n return combinedItems;\n}\n\n\n// Generated by peggy v. 4.2.0 (ts-pegjs plugin v. 3.1.0 )\n//\n// https://peggyjs.org/ https://github.com/metadevpro/ts-pegjs\n\"use strict\";\nfunction $d19fa9f128cdbd26$var$peg$padEnd(str, targetLength, padString) {\n padString = padString || ' ';\n if (str.length > targetLength) return str;\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\nclass $d19fa9f128cdbd26$export$628c65c376ead699 extends Error {\n static buildMessage(expected, found) {\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, \"\\\\\\\"\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, (ch)=>\"\\\\x0\" + hex(ch)).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, (ch)=>\"\\\\x\" + hex(ch));\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, (ch)=>\"\\\\x0\" + hex(ch)).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, (ch)=>\"\\\\x\" + hex(ch));\n }\n function describeExpectation(expectation) {\n switch(expectation.type){\n case \"literal\":\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n case \"class\":\n const escapedParts = expectation.parts.map((part)=>{\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n case \"any\":\n return \"any character\";\n case \"end\":\n return \"end of input\";\n case \"other\":\n return expectation.description;\n }\n }\n function describeExpected(expected1) {\n const descriptions = expected1.map(describeExpectation);\n let i;\n let j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for(i = 1, j = 1; i < descriptions.length; i++)if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n descriptions.length = j;\n }\n switch(descriptions.length){\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found1) {\n return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n }\n constructor(message, expected, found, location){\n super();\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = \"PeggySyntaxError\";\n if (typeof Object.setPrototypeOf === \"function\") Object.setPrototypeOf(this, $d19fa9f128cdbd26$export$628c65c376ead699.prototype);\n else this.__proto__ = $d19fa9f128cdbd26$export$628c65c376ead699.prototype;\n if (typeof Error.captureStackTrace === \"function\") Error.captureStackTrace(this, $d19fa9f128cdbd26$export$628c65c376ead699);\n }\n format(sources) {\n let str = 'Error: ' + this.message;\n if (this.location) {\n let src = null;\n let k;\n for(k = 0; k < sources.length; k++)if (sources[k].grammarSource === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n let s = this.location.start;\n let loc = this.location.source + ':' + s.line + ':' + s.column;\n if (src) {\n let e = this.location.end;\n let filler = $d19fa9f128cdbd26$var$peg$padEnd('', s.line.toString().length, ' ');\n let line = src[s.line - 1];\n let last = s.line === e.line ? e.column : line.length + 1;\n str += '\\n --> ' + loc + '\\n' + filler + ' |\\n' + s.line + ' | ' + line + '\\n' + filler + ' | ' + $d19fa9f128cdbd26$var$peg$padEnd('', s.column - 1, ' ') + $d19fa9f128cdbd26$var$peg$padEnd('', last - s.column, '^');\n } else str += '\\n at ' + loc;\n }\n return str;\n }\n}\nfunction $d19fa9f128cdbd26$var$peg$parse(input, options) {\n options = options !== undefined ? options : {};\n const peg$FAILED = {};\n const peg$source = options.grammarSource;\n const peg$startRuleFunctions = {\n ChordSheet: peg$parseChordSheet\n };\n let peg$startRuleFunction = peg$parseChordSheet;\n const peg$c0 = function(lines, trailingLine) {\n return {\n type: 'chordSheet',\n lines: [\n ...lines,\n trailingLine\n ].flat()\n };\n };\n const peg$c1 = function(component) {\n return component;\n };\n const peg$c2 = function(line) {\n return line;\n };\n const peg$c3 = function(lyrics, tokens, chords, comment) {\n return $1582051153255182$export$45986ccf08e93b0b([\n lyrics ? {\n type: 'chordLyricsPair',\n chords: '',\n lyrics: lyrics\n } : null,\n ...$1582051153255182$export$ce8f3be11402ed10(tokens.flat(), options.chopFirstWord),\n chords ? {\n type: 'chordLyricsPair',\n chords: chords,\n lyrics: ''\n } : null,\n comment ? {\n type: 'comment',\n comment: comment\n } : null\n ].filter((x)=>x !== null));\n };\n const peg$c4 = function(lyrics) {\n return $1582051153255182$export$bb6f5ab929ea49e7(lyrics);\n };\n const peg$c5 = \"#\";\n const peg$c6 = peg$literalExpectation(\"#\", false);\n const peg$c7 = /^[^\\r\\n]/;\n const peg$c8 = peg$classExpectation([\n \"\\r\",\n \"\\n\"\n ], true, false);\n const peg$c9 = function(comment) {\n return comment;\n };\n const peg$c10 = function(annotation, lyrics, space) {\n return {\n type: 'chordLyricsPair',\n annotation: annotation || '',\n lyrics: lyrics + (space || '')\n };\n };\n const peg$c11 = function(chords, lyrics, space) {\n const mergedLyrics = lyrics.map((c)=>c.char || c).join('') + (space || '');\n return $1582051153255182$export$54f22f5279737844(chords || '', mergedLyrics);\n };\n const peg$c12 = function(lyrics) {\n return lyrics.map((c)=>c.char || c).join('');\n };\n const peg$c13 = \"[*\";\n const peg$c14 = peg$literalExpectation(\"[*\", false);\n const peg$c15 = \"]\";\n const peg$c16 = peg$literalExpectation(\"]\", false);\n const peg$c17 = function(annotation) {\n return annotation.map((c)=>c.char || c).join('');\n };\n const peg$c18 = \"[\";\n const peg$c19 = peg$literalExpectation(\"[\", false);\n const peg$c20 = function(chords) {\n return chords.map((c)=>c.char || c).join('');\n };\n const peg$c21 = /^[^\\]\\r\\n]/;\n const peg$c22 = peg$classExpectation([\n \"]\",\n \"\\r\",\n \"\\n\"\n ], true, false);\n const peg$c23 = \"\\\\\";\n const peg$c24 = peg$literalExpectation(\"\\\\\", false);\n const peg$c25 = function() {\n return {\n type: 'char',\n char: '\\\\'\n };\n };\n const peg$c26 = function() {\n return {\n type: 'char',\n char: ']'\n };\n };\n const peg$c27 = function(sequence) {\n return sequence;\n };\n const peg$c28 = \"%{\";\n const peg$c29 = peg$literalExpectation(\"%{\", false);\n const peg$c30 = \"}\";\n const peg$c31 = peg$literalExpectation(\"}\", false);\n const peg$c32 = function(variableName, valueTest, expressions) {\n return {\n type: 'ternary',\n variable: variableName.length > 0 ? variableName : null,\n valueTest: valueTest,\n ...expressions,\n location: location().start\n };\n };\n const peg$c33 = \"=\";\n const peg$c34 = peg$literalExpectation(\"=\", false);\n const peg$c35 = function(testValue) {\n return testValue;\n };\n const peg$c36 = \"|\";\n const peg$c37 = peg$literalExpectation(\"|\", false);\n const peg$c38 = function(trueExpression, falseExpression) {\n return {\n type: 'ternary',\n trueExpression: trueExpression,\n falseExpression: falseExpression,\n location: location().start\n };\n };\n const peg$c39 = function(falseExpression) {\n return falseExpression;\n };\n const peg$c40 = /^[a-zA-Z0-9\\-_]/;\n const peg$c41 = peg$classExpectation([\n [\n \"a\",\n \"z\"\n ],\n [\n \"A\",\n \"Z\"\n ],\n [\n \"0\",\n \"9\"\n ],\n \"-\",\n \"_\"\n ], false, false);\n const peg$c42 = \"%\";\n const peg$c43 = peg$literalExpectation(\"%\", false);\n const peg$c44 = \"{\";\n const peg$c45 = peg$literalExpectation(\"{\", false);\n const peg$c46 = function() {\n return {\n type: 'char',\n char: '%'\n };\n };\n const peg$c47 = function() {\n return {\n type: 'char',\n char: ']'\n };\n };\n const peg$c48 = function() {\n return {\n type: 'char',\n char: '|'\n };\n };\n const peg$c49 = function() {\n return {\n type: 'char',\n char: '\\x7d'\n };\n };\n const peg$c50 = /^[^|[\\]\\\\{}%#\\r\\n\\t ]/;\n const peg$c51 = peg$classExpectation([\n \"|\",\n \"[\",\n \"]\",\n \"\\\\\",\n \"{\",\n \"}\",\n \"%\",\n \"#\",\n \"\\r\",\n \"\\n\",\n \"\\t\",\n \" \"\n ], true, false);\n const peg$c52 = function() {\n return {\n type: 'char',\n char: '\\\\'\n };\n };\n const peg$c53 = function() {\n return {\n type: 'char',\n char: '['\n };\n };\n const peg$c54 = function() {\n return {\n type: 'char',\n char: '\\x7b'\n };\n };\n const peg$c55 = function() {\n return {\n type: 'char',\n char: '#'\n };\n };\n const peg$c56 = \" \";\n const peg$c57 = peg$literalExpectation(\" \", false);\n const peg$c58 = function() {\n return {\n type: 'char',\n char: options?.softLineBreaks ? '\\xa0' : ' '\n };\n };\n const peg$c59 = \"chord\";\n const peg$c60 = peg$literalExpectation(\"chord\", false);\n const peg$c61 = \"define\";\n const peg$c62 = peg$literalExpectation(\"define\", false);\n const peg$c63 = \":\";\n const peg$c64 = peg$literalExpectation(\":\", false);\n const peg$c65 = function(name, selector, value) {\n const { text: text, ...chordDefinition } = value;\n return {\n type: 'tag',\n name: name,\n value: text,\n chordDefinition: chordDefinition,\n location: location().start,\n selector: selector?.value,\n isNegated: selector?.isNegated\n };\n };\n const peg$c66 = function(tagName, selector, tagColonWithValue) {\n return $1582051153255182$export$4478cda40be33ba2(tagName, tagColonWithValue, selector, location());\n };\n const peg$c67 = \"-\";\n const peg$c68 = peg$literalExpectation(\"-\", false);\n const peg$c69 = function(value, negator) {\n return {\n value: value,\n isNegated: !!negator\n };\n };\n const peg$c70 = \"!\";\n const peg$c71 = peg$literalExpectation(\"!\", false);\n const peg$c72 = function() {\n return true;\n };\n const peg$c73 = function(tagValue) {\n return tagValue;\n };\n const peg$c74 = function(attributes) {\n return {\n attributes: attributes\n };\n };\n const peg$c75 = function(value) {\n return {\n value: value\n };\n };\n const peg$c76 = function(attributes) {\n const obj = {};\n attributes.forEach((pair)=>{\n obj[pair[0]] = pair[1];\n });\n return obj;\n };\n const peg$c77 = function(attribute) {\n return attribute;\n };\n const peg$c78 = function(name, value) {\n return [\n name,\n value\n ];\n };\n const peg$c79 = /^[a-zA-Z_]/;\n const peg$c80 = peg$classExpectation([\n [\n \"a\",\n \"z\"\n ],\n [\n \"A\",\n \"Z\"\n ],\n \"_\"\n ], false, false);\n const peg$c81 = function(chars) {\n return chars.map((c)=>c.char || c).join('');\n };\n const peg$c82 = /^[^}\\\\\\r\\n]/;\n const peg$c83 = peg$classExpectation([\n \"}\",\n \"\\\\\",\n \"\\r\",\n \"\\n\"\n ], true, false);\n const peg$c84 = /^[a-zA-Z\\-_]/;\n const peg$c85 = peg$classExpectation([\n [\n \"a\",\n \"z\"\n ],\n [\n \"A\",\n \"Z\"\n ],\n \"-\",\n \"_\"\n ], false, false);\n const peg$c86 = \"\\\"\";\n const peg$c87 = peg$literalExpectation(\"\\\"\", false);\n const peg$c88 = function(value) {\n return value;\n };\n const peg$c89 = /^[^\"}]/;\n const peg$c90 = peg$classExpectation([\n \"\\\"\",\n \"}\"\n ], true, false);\n const peg$c91 = function() {\n return {\n type: 'char',\n char: '\"'\n };\n };\n const peg$c92 = \"frets\";\n const peg$c93 = peg$literalExpectation(\"frets\", false);\n const peg$c94 = function(name, baseFret, frets, fingers) {\n return {\n name: name,\n baseFret: baseFret || 1,\n frets: frets,\n fingers: fingers,\n text: text()\n };\n };\n const peg$c95 = \"/\";\n const peg$c96 = peg$literalExpectation(\"/\", false);\n const peg$c97 = /^[A-Ga-g]/;\n const peg$c98 = peg$classExpectation([\n [\n \"A\",\n \"G\"\n ],\n [\n \"a\",\n \"g\"\n ]\n ], false, false);\n const peg$c99 = /^[b#\\u266D\\u266F]/;\n const peg$c100 = peg$classExpectation([\n \"b\",\n \"#\",\n \"\\u266D\",\n \"\\u266F\"\n ], false, false);\n const peg$c101 = \"es\";\n const peg$c102 = peg$literalExpectation(\"es\", false);\n const peg$c103 = \"s\";\n const peg$c104 = peg$literalExpectation(\"s\", false);\n const peg$c105 = \"is\";\n const peg$c106 = peg$literalExpectation(\"is\", false);\n const peg$c107 = /^[a-zA-Z0-9#\\u266Fb\\u266D()+\\-\\/\\xF8\\u0394\\u2212]/;\n const peg$c108 = peg$classExpectation([\n [\n \"a\",\n \"z\"\n ],\n [\n \"A\",\n \"Z\"\n ],\n [\n \"0\",\n \"9\"\n ],\n \"#\",\n \"\\u266F\",\n \"b\",\n \"\\u266D\",\n \"(\",\n \")\",\n \"+\",\n \"-\",\n \"/\",\n \"\\xF8\",\n \"\\u0394\",\n \"\\u2212\"\n ], false, false);\n const peg$c109 = \"base-fret\";\n const peg$c110 = peg$literalExpectation(\"base-fret\", false);\n const peg$c111 = function(baseFret) {\n return baseFret;\n };\n const peg$c112 = \"fingers\";\n const peg$c113 = peg$literalExpectation(\"fingers\", false);\n const peg$c114 = function(fingers) {\n return fingers;\n };\n const peg$c115 = function(finger) {\n return finger;\n };\n const peg$c116 = /^[\\-A-Za-z]/;\n const peg$c117 = peg$classExpectation([\n \"-\",\n [\n \"A\",\n \"Z\"\n ],\n [\n \"a\",\n \"z\"\n ]\n ], false, false);\n const peg$c118 = /^[0-9]/;\n const peg$c119 = peg$classExpectation([\n [\n \"0\",\n \"9\"\n ]\n ], false, false);\n const peg$c120 = function(number) {\n return parseInt(number, 10);\n };\n const peg$c121 = /^[a-zA-Z]/;\n const peg$c122 = peg$classExpectation([\n [\n \"a\",\n \"z\"\n ],\n [\n \"A\",\n \"Z\"\n ]\n ], false, false);\n const peg$c123 = /^[\\-NXnx]/;\n const peg$c124 = peg$classExpectation([\n \"-\",\n \"N\",\n \"X\",\n \"n\",\n \"x\"\n ], false, false);\n const peg$c125 = function(fret) {\n return fret;\n };\n const peg$c126 = /^[1-9]/;\n const peg$c127 = peg$classExpectation([\n [\n \"1\",\n \"9\"\n ]\n ], false, false);\n const peg$c128 = \"0\";\n const peg$c129 = peg$literalExpectation(\"0\", false);\n const peg$c130 = function() {\n return 0;\n };\n const peg$c131 = \"-1\";\n const peg$c132 = peg$literalExpectation(\"-1\", false);\n const peg$c133 = /^[NXnx]/;\n const peg$c134 = peg$classExpectation([\n \"N\",\n \"X\",\n \"n\",\n \"x\"\n ], false, false);\n const peg$c135 = function(startTag, content, endTag) {\n return $1582051153255182$export$665e0f4515a68234(startTag, endTag, content);\n };\n const peg$c136 = \"start_of_abc\";\n const peg$c137 = peg$literalExpectation(\"start_of_abc\", false);\n const peg$c138 = \"end_of_abc\";\n const peg$c139 = peg$literalExpectation(\"end_of_abc\", false);\n const peg$c140 = function(tagName) {\n return $1582051153255182$export$4478cda40be33ba2(tagName, null, null, location());\n };\n const peg$c141 = \"start_of_grid\";\n const peg$c142 = peg$literalExpectation(\"start_of_grid\", false);\n const peg$c143 = \"sog\";\n const peg$c144 = peg$literalExpectation(\"sog\", false);\n const peg$c145 = \"end_of_grid\";\n const peg$c146 = peg$literalExpectation(\"end_of_grid\", false);\n const peg$c147 = \"eog\";\n const peg$c148 = peg$literalExpectation(\"eog\", false);\n const peg$c149 = \"start_of_ly\";\n const peg$c150 = peg$literalExpectation(\"start_of_ly\", false);\n const peg$c151 = \"end_of_ly\";\n const peg$c152 = peg$literalExpectation(\"end_of_ly\", false);\n const peg$c153 = \"start_of_tab\";\n const peg$c154 = peg$literalExpectation(\"start_of_tab\", false);\n const peg$c155 = \"sot\";\n const peg$c156 = peg$literalExpectation(\"sot\", false);\n const peg$c157 = \"end_of_tab\";\n const peg$c158 = peg$literalExpectation(\"end_of_tab\", false);\n const peg$c159 = \"eot\";\n const peg$c160 = peg$literalExpectation(\"eot\", false);\n const peg$c161 = peg$anyExpectation();\n const peg$c162 = peg$otherExpectation(\"whitespace\");\n const peg$c163 = peg$otherExpectation(\"optional whitespace\");\n const peg$c164 = /^[ \\t\\n\\r]/;\n const peg$c165 = peg$classExpectation([\n \" \",\n \"\\t\",\n \"\\n\",\n \"\\r\"\n ], false, false);\n const peg$c166 = peg$otherExpectation(\"space\");\n const peg$c167 = /^[ \\t]/;\n const peg$c168 = peg$classExpectation([\n \" \",\n \"\\t\"\n ], false, false);\n const peg$c169 = /^[\\n\\r]/;\n const peg$c170 = peg$classExpectation([\n \"\\n\",\n \"\\r\"\n ], false, false);\n const peg$c171 = \"\\n\";\n const peg$c172 = peg$literalExpectation(\"\\n\", false);\n const peg$c173 = \"\\r\";\n const peg$c174 = peg$literalExpectation(\"\\r\", false);\n let peg$currPos = 0;\n let peg$savedPos = 0;\n const peg$posDetailsCache = [\n {\n line: 1,\n column: 1\n }\n ];\n let peg$maxFailPos = 0;\n let peg$maxFailExpected = [];\n let peg$silentFails = 0;\n let peg$result;\n if (options.startRule !== undefined) {\n if (!(options.startRule in peg$startRuleFunctions)) throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError([\n peg$otherExpectation(description)\n ], input.substring(peg$savedPos, peg$currPos), location1);\n }\n function error(message, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location1);\n }\n function peg$literalExpectation(text1, ignoreCase) {\n return {\n type: \"literal\",\n text: text1,\n ignoreCase: ignoreCase\n };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return {\n type: \"class\",\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase\n };\n }\n function peg$anyExpectation() {\n return {\n type: \"any\"\n };\n }\n function peg$endExpectation() {\n return {\n type: \"end\"\n };\n }\n function peg$otherExpectation(description) {\n return {\n type: \"other\",\n description: description\n };\n }\n function peg$computePosDetails(pos) {\n let details = peg$posDetailsCache[pos];\n let p;\n if (details) return details;\n else {\n p = pos - 1;\n while(!peg$posDetailsCache[p])p--;\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while(p < pos){\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else details.column++;\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n const startPosDetails = peg$computePosDetails(startPos);\n const endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected1) {\n if (peg$currPos < peg$maxFailPos) return;\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected1);\n }\n function peg$buildSimpleError(message, location1) {\n return new $d19fa9f128cdbd26$export$628c65c376ead699(message, [], \"\", location1);\n }\n function peg$buildStructuredError(expected1, found, location1) {\n return new $d19fa9f128cdbd26$export$628c65c376ead699($d19fa9f128cdbd26$export$628c65c376ead699.buildMessage(expected1, found), expected1, found, location1);\n }\n function peg$parseChordSheet() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseComponentWithNewline();\n while(s2 !== peg$FAILED){\n s1.push(s2);\n s2 = peg$parseComponentWithNewline();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseComponent();\n if (s2 === peg$FAILED) s2 = null;\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseComponentWithNewline() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseComponent();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNewLine();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c1(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseComponent() {\n let s0;\n s0 = peg$parseSection();\n if (s0 === peg$FAILED) s0 = peg$parseLine();\n return s0;\n }\n function peg$parseLineWithNewline() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseLine();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNewLine();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c2(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseLine() {\n let s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseLyrics();\n if (s2 === peg$FAILED) s2 = null;\n if (s2 !== peg$FAILED) s1 = input.substring(s1, peg$currPos);\n else s1 = s2;\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseToken();\n while(s3 !== peg$FAILED){\n s2.push(s3);\n s3 = peg$parseToken();\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseChord();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseComment();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseSpace();\n while(s6 !== peg$FAILED){\n s5.push(s6);\n s6 = peg$parseSpace();\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c3(s1, s2, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseToken() {\n let s0, s1;\n s0 = peg$parseChordDefinition();\n if (s0 === peg$FAILED) {\n s0 = peg$parseTag();\n if (s0 === peg$FAILED) {\n s0 = peg$parseAnnotationLyricsPair();\n if (s0 === peg$FAILED) {\n s0 = peg$parseChordLyricsPair();\n if (s0 === peg$FAILED) {\n s0 = peg$parseMetaTernary();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseLyrics();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c4(s1);\n }\n s0 = s1;\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseComment() {\n let s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parseSpace();\n if (s1 === peg$FAILED) s1 = null;\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 35) {\n s2 = peg$c5;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c6);\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n if (peg$c7.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c8);\n }\n while(s5 !== peg$FAILED){\n s4.push(s5);\n if (peg$c7.test(input.charAt(peg$currPos))) {\n s5 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c8);\n }\n }\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c9(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseAnnotationLyricsPair() {\n let s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parseAnnotation();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$parseLyrics();\n while(s4 !== peg$FAILED){\n s3.push(s4);\n s4 = peg$parseLyrics();\n }\n if (s3 !== peg$FAILED) s2 = input.substring(s2, peg$currPos);\n else s2 = s3;\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n s5 = peg$parseSpace();\n while(s5 !== peg$FAILED){\n s4.push(s5);\n s5 = peg$parseSpace();\n }\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c10(s1, s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordLyricsPair() {\n let s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parseChord();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseLyricsChar();\n while(s3 !== peg$FAILED){\n s2.push(s3);\n s3 = peg$parseLyricsChar();\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n s5 = peg$parseSpace();\n while(s5 !== peg$FAILED){\n s4.push(s5);\n s5 = peg$parseSpace();\n }\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c11(s1, s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseLyrics() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseLyricsCharOrSpace();\n if (s2 !== peg$FAILED) while(s2 !== peg$FAILED){\n s1.push(s2);\n s2 = peg$parseLyricsCharOrSpace();\n }\n else s1 = peg$FAILED;\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c12(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseLyricsCharOrSpace() {\n let s0;\n s0 = peg$parseLyricsChar();\n if (s0 === peg$FAILED) s0 = peg$parseSpace();\n return s0;\n }\n function peg$parseAnnotation() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parseEscape();\n peg$silentFails--;\n if (s2 === peg$FAILED) s1 = undefined;\n else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c13) {\n s2 = peg$c13;\n peg$currPos += 2;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c14);\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseChordChar();\n if (s4 !== peg$FAILED) while(s4 !== peg$FAILED){\n s3.push(s4);\n s4 = peg$parseChordChar();\n }\n else s3 = peg$FAILED;\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s4 = peg$c15;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c16);\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c17(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChord() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$parseEscape();\n peg$silentFails--;\n if (s2 === peg$FAILED) s1 = undefined;\n else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 91) {\n s2 = peg$c18;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c19);\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseChordChar();\n while(s4 !== peg$FAILED){\n s3.push(s4);\n s4 = peg$parseChordChar();\n }\n if (s3 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 93) {\n s4 = peg$c15;\n peg$currPos++;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c16);\n }\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c20(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordChar() {\n let s0, s1, s2, s3;\n if (peg$c21.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c22);\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEscape();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s3 = peg$c23;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c24);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c25();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c15;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c16);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c26();\n }\n s2 = s3;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c27(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseMetaTernary() {\n let s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 2) === peg$c28) {\n s1 = peg$c28;\n peg$currPos += 2;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c29);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = peg$parseMetaVariableName();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseMetaValueTest();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseMetaTernaryTrueFalseExpressions();\n if (s6 === peg$FAILED) s6 = null;\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s8 = peg$c30;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c32(s3, s4, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseMetaValueTest() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 61) {\n s1 = peg$c33;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c34);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseMetaTestValue();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c35(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseMetaTestValue() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseChar();\n if (s2 !== peg$FAILED) while(s2 !== peg$FAILED){\n s1.push(s2);\n s2 = peg$parseChar();\n }\n else s1 = peg$FAILED;\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseMetaTernaryTrueFalseExpressions() {\n let s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 124) {\n s1 = peg$c36;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c37);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseMetaExpression();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseMetaTernaryFalseExpression();\n if (s5 === peg$FAILED) s5 = null;\n if (s5 !== peg$FAILED) {\n s6 = peg$parse_();\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c38(s3, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseMetaTernaryFalseExpression() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 124) {\n s1 = peg$c36;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c37);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseMetaExpression();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c39(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseMetaVariableName() {\n let s0, s1;\n s0 = [];\n if (peg$c40.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c41);\n }\n if (s1 !== peg$FAILED) while(s1 !== peg$FAILED){\n s0.push(s1);\n if (peg$c40.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c41);\n }\n }\n else s0 = peg$FAILED;\n return s0;\n }\n function peg$parseMetaExpression() {\n let s0, s1, s2, s3;\n s0 = [];\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parseChar();\n if (s3 !== peg$FAILED) while(s3 !== peg$FAILED){\n s2.push(s3);\n s3 = peg$parseChar();\n }\n else s2 = peg$FAILED;\n if (s2 !== peg$FAILED) s1 = input.substring(s1, peg$currPos);\n else s1 = s2;\n if (s1 === peg$FAILED) s1 = peg$parseMetaTernary();\n if (s1 !== peg$FAILED) while(s1 !== peg$FAILED){\n s0.push(s1);\n s1 = peg$currPos;\n s2 = [];\n s3 = peg$parseChar();\n if (s3 !== peg$FAILED) while(s3 !== peg$FAILED){\n s2.push(s3);\n s3 = peg$parseChar();\n }\n else s2 = peg$FAILED;\n if (s2 !== peg$FAILED) s1 = input.substring(s1, peg$currPos);\n else s1 = s2;\n if (s1 === peg$FAILED) s1 = peg$parseMetaTernary();\n }\n else s0 = peg$FAILED;\n return s0;\n }\n function peg$parseLyricsChar() {\n let s0, s1, s2, s3;\n s0 = peg$parseWordChar();\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 37) {\n s1 = peg$c42;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c43);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n if (input.charCodeAt(peg$currPos) === 123) {\n s3 = peg$c44;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n peg$silentFails--;\n if (s3 === peg$FAILED) s2 = undefined;\n else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c46();\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 93) {\n s1 = peg$c15;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c16);\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c47();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 124) {\n s1 = peg$c36;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c37);\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c48();\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 125) {\n s1 = peg$c30;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c49();\n }\n s0 = s1;\n }\n }\n }\n }\n return s0;\n }\n function peg$parseChar() {\n let s0;\n s0 = peg$parseWordChar();\n if (s0 === peg$FAILED) s0 = peg$parseSpace();\n return s0;\n }\n function peg$parseWordChar() {\n let s0, s1, s2, s3;\n if (peg$c50.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c51);\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEscape();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s3 = peg$c23;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c24);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c52();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 124) {\n s3 = peg$c36;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c37);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c48();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 91) {\n s3 = peg$c18;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c19);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c53();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 93) {\n s3 = peg$c15;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c16);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c47();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s3 = peg$c44;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c54();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c30;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c49();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 37) {\n s3 = peg$c42;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c43);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c46();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 35) {\n s3 = peg$c5;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c6);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c55();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 32) {\n s3 = peg$c56;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c57);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c58();\n }\n s2 = s3;\n }\n }\n }\n }\n }\n }\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c27(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseChordDefinition() {\n let s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c59) {\n s3 = peg$c59;\n peg$currPos += 5;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c60);\n }\n if (s3 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c61) {\n s3 = peg$c61;\n peg$currPos += 6;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c62);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseTagSelector();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 58) {\n s6 = peg$c63;\n peg$currPos++;\n } else {\n s6 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c64);\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n s8 = peg$parseChordDefinitionValue();\n if (s8 !== peg$FAILED) {\n s9 = peg$parse_();\n if (s9 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s10 = peg$c30;\n peg$currPos++;\n } else {\n s10 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s10 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c65(s3, s4, s8);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseTag() {\n let s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = peg$parseTagName();\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseTagSelector();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseTagColonWithValue();\n if (s6 === peg$FAILED) s6 = null;\n if (s6 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s7 = peg$c30;\n peg$currPos++;\n } else {\n s7 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s7 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c66(s3, s4, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseTagSelector() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 45) {\n s1 = peg$c67;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c68);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagSelectorValue();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseTagSelectorNegator();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c69(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseTagSelectorNegator() {\n let s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 33) {\n s1 = peg$c70;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c71);\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c72();\n }\n s0 = s1;\n return s0;\n }\n function peg$parseTagSelectorValue() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n if (peg$c40.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c41);\n }\n if (s2 !== peg$FAILED) while(s2 !== peg$FAILED){\n s1.push(s2);\n if (peg$c40.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c41);\n }\n }\n else s1 = peg$FAILED;\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseTagColonWithValue() {\n let s0, s1, s2;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 58) {\n s1 = peg$c63;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c64);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagValue();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c73(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseTagValue() {\n let s0, s1;\n s0 = peg$currPos;\n s1 = peg$parseTagAttributes();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c74(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseTagSimpleValue();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c75(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseTagAttributes() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseTagAttributeWithLeadingSpace();\n if (s2 !== peg$FAILED) while(s2 !== peg$FAILED){\n s1.push(s2);\n s2 = peg$parseTagAttributeWithLeadingSpace();\n }\n else s1 = peg$FAILED;\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c76(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseTagAttributeWithLeadingSpace() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parse__();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseTagAttribute();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c77(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseTagAttribute() {\n let s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parseTagAttributeName();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 61) {\n s3 = peg$c33;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c34);\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseTagAttributeValue();\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c78(s1, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseTagName() {\n let s0, s1;\n s0 = [];\n if (peg$c79.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c80);\n }\n if (s1 !== peg$FAILED) while(s1 !== peg$FAILED){\n s0.push(s1);\n if (peg$c79.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c80);\n }\n }\n else s0 = peg$FAILED;\n return s0;\n }\n function peg$parseTagSimpleValue() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseTagValueChar();\n while(s3 !== peg$FAILED){\n s2.push(s3);\n s3 = peg$parseTagValueChar();\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c81(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseTagValueChar() {\n let s0, s1, s2, s3;\n if (peg$c82.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c83);\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEscape();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s3 = peg$c23;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c24);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c52();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c30;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c49();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s3 = peg$c44;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c54();\n }\n s2 = s3;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c27(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseTagAttributeName() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n if (peg$c84.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c85);\n }\n if (s2 !== peg$FAILED) while(s2 !== peg$FAILED){\n s1.push(s2);\n if (peg$c84.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c85);\n }\n }\n else s1 = peg$FAILED;\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseTagAttributeValue() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s1 = peg$c86;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c87);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n s3 = [];\n s4 = peg$parseTagAttributeValueChar();\n while(s4 !== peg$FAILED){\n s3.push(s4);\n s4 = peg$parseTagAttributeValueChar();\n }\n if (s3 !== peg$FAILED) s2 = input.substring(s2, peg$currPos);\n else s2 = s3;\n if (s2 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c86;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c87);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c88(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseTagAttributeValueChar() {\n let s0, s1, s2, s3;\n if (peg$c89.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c90);\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseEscape();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 92) {\n s3 = peg$c23;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c24);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c52();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 125) {\n s3 = peg$c30;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c49();\n }\n s2 = s3;\n if (s2 === peg$FAILED) {\n s2 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 34) {\n s3 = peg$c86;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c87);\n }\n if (s3 !== peg$FAILED) {\n peg$savedPos = s2;\n s3 = peg$c91();\n }\n s2 = s3;\n }\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c27(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n }\n return s0;\n }\n function peg$parseChordDefinitionValue() {\n let s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = peg$parseChordDefinitionName();\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseBaseFret();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c92) {\n s4 = peg$c92;\n peg$currPos += 5;\n } else {\n s4 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c93);\n }\n if (s4 !== peg$FAILED) {\n s5 = [];\n s6 = peg$parseFretWithLeadingSpace();\n if (s6 !== peg$FAILED) while(s6 !== peg$FAILED){\n s5.push(s6);\n s6 = peg$parseFretWithLeadingSpace();\n }\n else s5 = peg$FAILED;\n if (s5 !== peg$FAILED) {\n s6 = peg$parseChordFingersDefinition();\n if (s6 === peg$FAILED) s6 = null;\n if (s6 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c94(s1, s3, s5, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordDefinitionName() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseChordDefinitionNameBase();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseChordDefinitionNameBass();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n s2 = [\n s2,\n s3\n ];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseChordDefinitionNameBase() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseChordDefinitionNote();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseChordDefinitionSuffix();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n s2 = [\n s2,\n s3\n ];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseChordDefinitionNameBass() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s2 = peg$c95;\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c96);\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseChordDefinitionNote();\n if (s3 !== peg$FAILED) {\n s2 = [\n s2,\n s3\n ];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseChordDefinitionNote() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$currPos;\n if (peg$c97.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c98);\n }\n if (s2 !== peg$FAILED) {\n if (peg$c99.test(input.charAt(peg$currPos))) {\n s3 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c100);\n }\n if (s3 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c101) {\n s3 = peg$c101;\n peg$currPos += 2;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c102);\n }\n if (s3 === peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 115) {\n s3 = peg$c103;\n peg$currPos++;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c104);\n }\n if (s3 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c105) {\n s3 = peg$c105;\n peg$currPos += 2;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c106);\n }\n }\n }\n }\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n s2 = [\n s2,\n s3\n ];\n s1 = s2;\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n } else {\n peg$currPos = s1;\n s1 = peg$FAILED;\n }\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseChordDefinitionSuffix() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n if (peg$c107.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c108);\n }\n if (s2 !== peg$FAILED) while(s2 !== peg$FAILED){\n s1.push(s2);\n if (peg$c107.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c108);\n }\n }\n else s1 = peg$FAILED;\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseBaseFret() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 9) === peg$c109) {\n s1 = peg$c109;\n peg$currPos += 9;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c110);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse__();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseFretNumber();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse__();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c111(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordFingersDefinition() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parse__();\n if (s1 !== peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c112) {\n s2 = peg$c112;\n peg$currPos += 7;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c113);\n }\n if (s2 !== peg$FAILED) {\n s3 = [];\n s4 = peg$parseFingerWithLeadingSpace();\n if (s4 !== peg$FAILED) while(s4 !== peg$FAILED){\n s3.push(s4);\n s4 = peg$parseFingerWithLeadingSpace();\n }\n else s3 = peg$FAILED;\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c114(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseFingerWithLeadingSpace() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parse__();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseFinger();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c115(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseFinger() {\n let s0;\n s0 = peg$parseFingerNumber();\n if (s0 === peg$FAILED) {\n if (peg$c116.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c117);\n }\n }\n return s0;\n }\n function peg$parseFingerNumber() {\n let s0, s1;\n s0 = peg$currPos;\n if (peg$c118.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c119);\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c120(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseFingerLetter() {\n let s0;\n if (peg$c121.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c122);\n }\n return s0;\n }\n function peg$parseNoFingerSetting() {\n let s0;\n if (peg$c123.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c124);\n }\n return s0;\n }\n function peg$parseFretWithLeadingSpace() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parse__();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseFret();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c125(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseFret() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parse_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseFretNumber();\n if (s2 === peg$FAILED) {\n s2 = peg$parseOpenFret();\n if (s2 === peg$FAILED) s2 = peg$parseNonSoundingString();\n }\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c125(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseFretNumber() {\n let s0, s1;\n s0 = peg$currPos;\n if (peg$c126.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c127);\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c120(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseOpenFret() {\n let s0, s1;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 48) {\n s1 = peg$c128;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c129);\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c130();\n }\n s0 = s1;\n return s0;\n }\n function peg$parseNonSoundingString() {\n let s0;\n if (input.substr(peg$currPos, 2) === peg$c131) {\n s0 = peg$c131;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c132);\n }\n if (s0 === peg$FAILED) {\n if (peg$c133.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c134);\n }\n }\n return s0;\n }\n function peg$parseSection() {\n let s0;\n s0 = peg$parseAbcSection();\n if (s0 === peg$FAILED) {\n s0 = peg$parseGridSection();\n if (s0 === peg$FAILED) {\n s0 = peg$parseLySection();\n if (s0 === peg$FAILED) s0 = peg$parseTabSection();\n }\n }\n return s0;\n }\n function peg$parseAbcSection() {\n let s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$parseAbcStartTag();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNewLine();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseAbcEndTag();\n peg$silentFails--;\n if (s7 === peg$FAILED) s6 = undefined;\n else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parseSectionCharacter();\n if (s7 !== peg$FAILED) {\n s6 = [\n s6,\n s7\n ];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while(s5 !== peg$FAILED){\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseAbcEndTag();\n peg$silentFails--;\n if (s7 === peg$FAILED) s6 = undefined;\n else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parseSectionCharacter();\n if (s7 !== peg$FAILED) {\n s6 = [\n s6,\n s7\n ];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseAbcEndTag();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c135(s1, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseAbcStartTag() {\n let s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 12) === peg$c136) {\n s3 = peg$c136;\n peg$currPos += 12;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c137);\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseTagSelector();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseTagColonWithValue();\n if (s6 === peg$FAILED) s6 = null;\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s8 = peg$c30;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c66(s3, s4, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseAbcEndTag() {\n let s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c138) {\n s3 = peg$c138;\n peg$currPos += 10;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c139);\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c30;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c140(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseGridSection() {\n let s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$parseGridStartTag();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNewLine();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseGridEndTag();\n peg$silentFails--;\n if (s7 === peg$FAILED) s6 = undefined;\n else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parseSectionCharacter();\n if (s7 !== peg$FAILED) {\n s6 = [\n s6,\n s7\n ];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while(s5 !== peg$FAILED){\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseGridEndTag();\n peg$silentFails--;\n if (s7 === peg$FAILED) s6 = undefined;\n else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parseSectionCharacter();\n if (s7 !== peg$FAILED) {\n s6 = [\n s6,\n s7\n ];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseGridEndTag();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c135(s1, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseGridStartTag() {\n let s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 13) === peg$c141) {\n s3 = peg$c141;\n peg$currPos += 13;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c142);\n }\n if (s3 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c143) {\n s3 = peg$c143;\n peg$currPos += 3;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c144);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseTagSelector();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseTagColonWithValue();\n if (s6 === peg$FAILED) s6 = null;\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s8 = peg$c30;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c66(s3, s4, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseGridEndTag() {\n let s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c145) {\n s3 = peg$c145;\n peg$currPos += 11;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c146);\n }\n if (s3 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c147) {\n s3 = peg$c147;\n peg$currPos += 3;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c148);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c30;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c140(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseLySection() {\n let s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$parseLyStartTag();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNewLine();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseLyEndTag();\n peg$silentFails--;\n if (s7 === peg$FAILED) s6 = undefined;\n else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parseSectionCharacter();\n if (s7 !== peg$FAILED) {\n s6 = [\n s6,\n s7\n ];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while(s5 !== peg$FAILED){\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseLyEndTag();\n peg$silentFails--;\n if (s7 === peg$FAILED) s6 = undefined;\n else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parseSectionCharacter();\n if (s7 !== peg$FAILED) {\n s6 = [\n s6,\n s7\n ];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseLyEndTag();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c135(s1, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseLyStartTag() {\n let s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c149) {\n s3 = peg$c149;\n peg$currPos += 11;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c150);\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseTagSelector();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseTagColonWithValue();\n if (s6 === peg$FAILED) s6 = null;\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s8 = peg$c30;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c66(s3, s4, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseLyEndTag() {\n let s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c151) {\n s3 = peg$c151;\n peg$currPos += 9;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c152);\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c30;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c140(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseTabSection() {\n let s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$parseTabStartTag();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNewLine();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = [];\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseTabEndTag();\n peg$silentFails--;\n if (s7 === peg$FAILED) s6 = undefined;\n else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parseSectionCharacter();\n if (s7 !== peg$FAILED) {\n s6 = [\n s6,\n s7\n ];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n while(s5 !== peg$FAILED){\n s4.push(s5);\n s5 = peg$currPos;\n s6 = peg$currPos;\n peg$silentFails++;\n s7 = peg$parseTabEndTag();\n peg$silentFails--;\n if (s7 === peg$FAILED) s6 = undefined;\n else {\n peg$currPos = s6;\n s6 = peg$FAILED;\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parseSectionCharacter();\n if (s7 !== peg$FAILED) {\n s6 = [\n s6,\n s7\n ];\n s5 = s6;\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n } else {\n peg$currPos = s5;\n s5 = peg$FAILED;\n }\n }\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseTabEndTag();\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c135(s1, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseTabStartTag() {\n let s0, s1, s2, s3, s4, s5, s6, s7, s8;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 12) === peg$c153) {\n s3 = peg$c153;\n peg$currPos += 12;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c154);\n }\n if (s3 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c155) {\n s3 = peg$c155;\n peg$currPos += 3;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c156);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parseTagSelector();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_();\n if (s5 !== peg$FAILED) {\n s6 = peg$parseTagColonWithValue();\n if (s6 === peg$FAILED) s6 = null;\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_();\n if (s7 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s8 = peg$c30;\n peg$currPos++;\n } else {\n s8 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s8 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c66(s3, s4, s6);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseTabEndTag() {\n let s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c44;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_();\n if (s2 !== peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c157) {\n s3 = peg$c157;\n peg$currPos += 10;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c158);\n }\n if (s3 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c159) {\n s3 = peg$c159;\n peg$currPos += 3;\n } else {\n s3 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c160);\n }\n }\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c30;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c31);\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c140(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseSectionCharacter() {\n let s0;\n if (input.length > peg$currPos) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c161);\n }\n return s0;\n }\n function peg$parse__() {\n let s0, s1;\n peg$silentFails++;\n s0 = [];\n s1 = peg$parseWhitespaceCharacter();\n if (s1 !== peg$FAILED) while(s1 !== peg$FAILED){\n s0.push(s1);\n s1 = peg$parseWhitespaceCharacter();\n }\n else s0 = peg$FAILED;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c162);\n }\n return s0;\n }\n function peg$parse_() {\n let s0, s1;\n peg$silentFails++;\n s0 = [];\n s1 = peg$parseWhitespaceCharacter();\n while(s1 !== peg$FAILED){\n s0.push(s1);\n s1 = peg$parseWhitespaceCharacter();\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c163);\n }\n return s0;\n }\n function peg$parseWhitespaceCharacter() {\n let s0;\n if (peg$c164.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c165);\n }\n return s0;\n }\n function peg$parseSpace() {\n let s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$c167.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c168);\n }\n if (s2 !== peg$FAILED) while(s2 !== peg$FAILED){\n s1.push(s2);\n if (peg$c167.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c168);\n }\n }\n else s1 = peg$FAILED;\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c166);\n }\n return s0;\n }\n function peg$parseNewLine() {\n let s0;\n if (peg$c169.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c170);\n }\n if (s0 === peg$FAILED) s0 = peg$parseCarriageReturnLineFeed();\n return s0;\n }\n function peg$parseCarriageReturnLineFeed() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseCarriageReturn();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseLineFeed();\n if (s2 !== peg$FAILED) {\n s1 = [\n s1,\n s2\n ];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseLineFeed() {\n let s0;\n if (input.charCodeAt(peg$currPos) === 10) {\n s0 = peg$c171;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c172);\n }\n return s0;\n }\n function peg$parseCarriageReturn() {\n let s0;\n if (input.charCodeAt(peg$currPos) === 13) {\n s0 = peg$c173;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c174);\n }\n return s0;\n }\n function peg$parseEscape() {\n let s0;\n if (input.charCodeAt(peg$currPos) === 92) {\n s0 = peg$c23;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c24);\n }\n return s0;\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) return peg$result;\n else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) peg$fail(peg$endExpectation());\n throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n }\n}\nconst $d19fa9f128cdbd26$export$98e6a39c04603d36 = $d19fa9f128cdbd26$var$peg$parse;\n\n\n\n\n\n\n\nclass $7011f990fc73fda8$var$Font {\n constructor({ font: font, size: size, colour: colour } = {\n font: null,\n size: null,\n colour: null\n }){\n /**\n * The font\n * @member {string | null}\n */ this.font = null;\n /**\n * The font size, expressed in either pixels or percentage.\n * @member {FontSize | null}\n */ this.size = null;\n /**\n * The font color\n * @member {string | null}\n */ this.colour = null;\n this.font = font ? font.replace(/\"/g, '\\'') : null;\n this.size = size || null;\n this.colour = colour || null;\n }\n clone() {\n return new $7011f990fc73fda8$var$Font({\n font: this.font,\n size: this.size,\n colour: this.colour\n });\n }\n /**\n * Converts the font, size and color to a CSS string.\n * If possible, font and size are combined to the `font` shorthand.\n * If `font` contains double quotes (`\"`) those will be converted to single quotes (`'`).\n *\n * @example\n * // Returns \"font-family: 'Times New Roman'\"\n * new Font({ font: '\"Times New Roman\"' }).toCssString()\n * @example\n * // Returns \"color: red; font-family: Verdana\"\n * new Font({ font: 'Verdana', colour: 'red' }).toCssString()\n * @example\n * // Returns \"font: 30px Verdana\"\n * new Font({ font: 'Verdana', size: '30' }).toCssString()\n * @example\n * // Returns \"color: blue; font: 30% Verdana\"\n * new Font({ font: 'Verdana', size: '30%', colour: 'blue' }).toCssString()\n *\n * @return {string} The CSS string\n */ toCssString() {\n const properties = {};\n if (this.colour) properties.color = this.colour;\n if (this.font && this.size) properties.font = `${this.size} ${this.font}`;\n else if (this.font) properties['font-family'] = this.font;\n else if (this.size) properties['font-size'] = `${this.size}`;\n return Object.keys(properties).map((key)=>`${key}: ${properties[key]}`).join('; ');\n }\n}\nvar $7011f990fc73fda8$export$2e2bcd8739ae039 = $7011f990fc73fda8$var$Font;\n\n\n\n/**\n * Represents a line in a chord sheet, consisting of items of type ChordLyricsPair or Tag\n */ class $a449f9ee1c7acbe4$var$Line {\n constructor({ type: type, items: items } = {\n type: (0, $72b24102c7d826fd$export$c53d0f541b41b88e),\n items: []\n }){\n /**\n * The items ({@link ChordLyricsPair} or {@link Tag} or {@link Comment}) of which the line consists\n * @type {Array.<(ChordLyricsPair|Tag|Comment)>}\n */ this.items = [];\n /**\n * The line type, This is set by the ChordProParser when it read tags like {start_of_chorus} or {start_of_verse}\n * It uses the following mapping to determine the line type from directives:\n * - `start_of_abc` => {@link ABC}\n * - `start_of_bridge` => {@link BRIDGE}\n * - `start_of_chorus` => {@link CHORUS}\n * - `start_of_grid` => {@link GRID}\n * - `start_of_ly` => {@link LILYPOND}\n * - `start_of_tab` => {@link TAB}\n * - `start_of_verse` => {@link VERSE}\n *\n * There are two special cases:\n * - {@link INDETERMINATE} when the paragraph lines do not have a consistent type\n * - {@link NONE} when no type is derived\n * @type {string}\n */ this.type = (0, $72b24102c7d826fd$export$c53d0f541b41b88e);\n this.currentChordLyricsPair = new (0, $0d04ced54ebef610$export$2e2bcd8739ae039)();\n this.key = null;\n this.transposeKey = null;\n this.lineNumber = null;\n this.selector = null;\n /**\n * The text font that applies to this line. Is derived from the directives:\n * `textfont`, `textsize` and `textcolour`\n * See: https://www.chordpro.org/chordpro/directives-props_text_legacy/\n * @type {Font}\n */ this.textFont = new (0, $7011f990fc73fda8$export$2e2bcd8739ae039)();\n /**\n * The chord font that applies to this line. Is derived from the directives:\n * `chordfont`, `chordsize` and `chordcolour`\n * See: https://www.chordpro.org/chordpro/directives-props_chord_legacy/\n * @type {Font}\n */ this.chordFont = new (0, $7011f990fc73fda8$export$2e2bcd8739ae039)();\n this.type = type;\n this.items = items;\n }\n /**\n * Indicates whether the line contains any items\n * @returns {boolean}\n */ isEmpty() {\n return this.items.length === 0;\n }\n isNotEmpty() {\n return !this.isEmpty();\n }\n /**\n * Adds an item ({@link ChordLyricsPair} or {@link Tag}) to the line\n * @param {ChordLyricsPair|Tag} item The item to be added\n */ addItem(item) {\n if (item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039)) this.addTag(item);\n else if (item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039)) this.addChordLyricsPair(item);\n else if (item instanceof (0, $acbb1127ce68c11a$export$2e2bcd8739ae039)) this.addComment(item);\n else this.items.push(item);\n }\n /**\n * Indicates whether the line contains items that are renderable\n * @returns {boolean}\n */ hasRenderableItems() {\n return this.items.some((item)=>item.isRenderable());\n }\n /**\n * Returns a deep copy of the line and all of its items\n * @returns {Line}\n */ clone() {\n return this.mapItems(null);\n }\n mapItems(func) {\n const clonedLine = new $a449f9ee1c7acbe4$var$Line();\n clonedLine.items = this.items.map((item)=>{\n const clonedItem = item.clone();\n return func ? func(clonedItem) : clonedItem;\n }).filter((item)=>item !== null);\n clonedLine.type = this.type;\n return clonedLine;\n }\n /**\n * Indicates whether the line type is {@link BRIDGE}\n * @returns {boolean}\n */ isBridge() {\n return this.type === (0, $72b24102c7d826fd$export$78d8c50e853acd10);\n }\n /**\n * Indicates whether the line type is {@link CHORUS}\n * @returns {boolean}\n */ isChorus() {\n return this.type === (0, $72b24102c7d826fd$export$8db6c706fc9142b2);\n }\n /**\n * Indicates whether the line type is {@link GRID}\n * @returns {boolean}\n */ isGrid() {\n return this.type === (0, $72b24102c7d826fd$export$e2b0b9a5e613f348);\n }\n /**\n * Indicates whether the line type is {@link TAB}\n * @returns {boolean}\n */ isTab() {\n return this.type === (0, $72b24102c7d826fd$export$f1c9dd0f5207dd5e);\n }\n /**\n * Indicates whether the line type is {@link VERSE}\n * @returns {boolean}\n */ isVerse() {\n return this.type === (0, $72b24102c7d826fd$export$4b194284baed1659);\n }\n /**\n * Indicates whether the line contains items that are renderable. Please use {@link hasRenderableItems}\n * @deprecated\n * @returns {boolean}\n */ hasContent() {\n return this.hasRenderableItems();\n }\n addChordLyricsPair(chords = null, lyrics = null) {\n if (chords instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039)) this.currentChordLyricsPair = chords;\n else this.currentChordLyricsPair = new (0, $0d04ced54ebef610$export$2e2bcd8739ae039)(chords || '', lyrics || '');\n this.items.push(this.currentChordLyricsPair);\n return this.currentChordLyricsPair;\n }\n ensureChordLyricsPair() {\n if (!this.currentChordLyricsPair) this.addChordLyricsPair();\n }\n chords(chr) {\n this.ensureChordLyricsPair();\n this.currentChordLyricsPair.chords += chr;\n }\n lyrics(chr) {\n this.ensureChordLyricsPair();\n this.currentChordLyricsPair.lyrics += chr;\n }\n addTag(nameOrTag, value = null) {\n const tag = nameOrTag instanceof (0, $b58c551853385714$export$2e2bcd8739ae039) ? nameOrTag : new (0, $b58c551853385714$export$2e2bcd8739ae039)(nameOrTag, value);\n this.items.push(tag);\n return tag;\n }\n addComment(content) {\n const comment = content instanceof (0, $acbb1127ce68c11a$export$2e2bcd8739ae039) ? content : new (0, $acbb1127ce68c11a$export$2e2bcd8739ae039)(content);\n this.items.push(comment);\n return comment;\n }\n set(properties) {\n return new $a449f9ee1c7acbe4$var$Line({\n type: this.type,\n items: this.items,\n ...properties\n });\n }\n get _tag() {\n if (this.items.length !== 1) return null;\n const item = this.items[0];\n if (!(item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039))) return null;\n return item;\n }\n isSectionStart() {\n return this._tag?.isSectionStart() || false;\n }\n isSectionEnd() {\n return this._tag?.isSectionEnd() || false;\n }\n}\nvar $a449f9ee1c7acbe4$export$2e2bcd8739ae039 = $a449f9ee1c7acbe4$var$Line;\n\n\n\n\n\nfunction $ca405333ab46d462$var$getCommonValue(values, fallback) {\n const uniqueValues = [\n ...new Set(values)\n ];\n if (uniqueValues.length === 1) return uniqueValues[0];\n return fallback;\n}\n/**\n * Represents a paragraph of lines in a chord sheet\n */ class $ca405333ab46d462$var$Paragraph {\n addLine(line) {\n this.lines.push(line);\n }\n /**\n * Indicates whether the paragraph only contains literals. If true, {@link contents} can be used to retrieve\n * the paragraph contents as one string where lines are separated by newlines.\n * @see {@link contents}\n * @returns {boolean}\n */ isLiteral() {\n const { lines: lines } = this;\n if (this.isEmpty()) return false;\n return lines.every((line)=>line.items.every((item)=>{\n if (item instanceof (0, $34ab5875df061287$export$2e2bcd8739ae039)) return true;\n if (item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039) && item.isSectionDelimiter()) return true;\n return false;\n }));\n }\n /**\n * Returns the paragraph contents as one string where lines are separated by newlines\n * @returns {string}\n */ get contents() {\n return this.lines.filter((line)=>line.items.every((item)=>item instanceof (0, $34ab5875df061287$export$2e2bcd8739ae039))).map((line)=>line.items.map((item)=>item.string).join('')).join('\\n');\n }\n /**\n * Returns the label of the paragraph. The label is the value of the first section delimiter tag\n * in the first line.\n * @returns {string|null}\n */ get label() {\n if (this.lines.length === 0) return null;\n const startTag = this.lines[0].items.find((item)=>item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039) && item.isSectionDelimiter());\n if (startTag) return startTag.label;\n return null;\n }\n /**\n * Tries to determine the common type for all lines. If the types for all lines are equal, it returns that type.\n * If not, it returns {@link INDETERMINATE}\n * For the possible values, see {@link Line.type}\n * @returns {string}\n */ get type() {\n const types = this.lines.map((line)=>line.type);\n return $ca405333ab46d462$var$getCommonValue(types, (0, $72b24102c7d826fd$export$c5a6fe907430212e));\n }\n get selector() {\n const selectors = this.lines.map((line)=>line.selector).filter((selector)=>selector !== null);\n return $ca405333ab46d462$var$getCommonValue(selectors, null);\n }\n /**\n * Indicates whether the paragraph contains lines with renderable items.\n * @see {@link Line.hasRenderableItems}\n * @returns {boolean}\n */ hasRenderableItems() {\n return this.lines.some((line)=>line.hasRenderableItems());\n }\n isEmpty() {\n return this.lines.length === 0;\n }\n constructor(){\n /**\n * The {@link Line} items of which the paragraph consists\n * @member\n * @type {Line[]}\n */ this.lines = [];\n }\n}\nvar $ca405333ab46d462$export$2e2bcd8739ae039 = $ca405333ab46d462$var$Paragraph;\n\n\n\n\n\nclass $56f32ce29e8cb670$var$MetadataAccessors {\n get key() {\n return this.getSingleMetadata((0, $b58c551853385714$export$7167c830cefcb6b5));\n }\n get title() {\n return this.getSingleMetadata((0, $b58c551853385714$export$f1e53f710478ceb4));\n }\n get subtitle() {\n return this.getSingleMetadata((0, $b58c551853385714$export$5895c693c74b9cf4));\n }\n get capo() {\n return this.getMetadata((0, $b58c551853385714$export$866f445d49bad88e));\n }\n get duration() {\n return this.getSingleMetadata((0, $b58c551853385714$export$bacc88974c736870));\n }\n get tempo() {\n return this.getSingleMetadata((0, $b58c551853385714$export$bd8d57d0bc5a8478));\n }\n get time() {\n return this.getMetadata((0, $b58c551853385714$export$a9905336c0111a3a));\n }\n get year() {\n return this.getSingleMetadata((0, $b58c551853385714$export$90b88dc425a06a95));\n }\n get album() {\n return this.getMetadata((0, $b58c551853385714$export$10227cb086d1770c));\n }\n get copyright() {\n return this.getSingleMetadata((0, $b58c551853385714$export$4ab8c75045d12480));\n }\n get lyricist() {\n return this.getMetadata((0, $b58c551853385714$export$a6901bd008617c61));\n }\n get artist() {\n return this.getMetadata((0, $b58c551853385714$export$17d8dfb3db842bf));\n }\n get composer() {\n return this.getMetadata((0, $b58c551853385714$export$98424633dc8c377f));\n }\n}\nvar $56f32ce29e8cb670$export$2e2bcd8739ae039 = $56f32ce29e8cb670$var$MetadataAccessors;\n\n\n\n\nfunction $709af735c74ed550$var$appendValue(array, value) {\n if (!array.includes(value)) array.push(value);\n}\n/**\n * Stores song metadata. Properties can be accessed using the get() method:\n *\n * const metadata = new Metadata({ author: 'John' });\n * metadata.get('author') // => 'John'\n *\n * See {@link Metadata#get}\n */ class $709af735c74ed550$var$Metadata extends (0, $56f32ce29e8cb670$export$2e2bcd8739ae039) {\n constructor(metadata = {}){\n super(), this.metadata = {};\n if (metadata) this.assign(metadata);\n }\n merge(metadata) {\n const clone = this.clone();\n clone.assign(metadata);\n return clone;\n }\n contains(key) {\n return key in this.metadata;\n }\n add(key, value) {\n if ((0, $b58c551853385714$export$3ef04055cb4a269a)(key)) return;\n if (!(key in this.metadata)) {\n this.metadata[key] = value;\n return;\n }\n const currentValue = this.metadata[key];\n if (currentValue === value) return;\n if (currentValue instanceof Array) {\n $709af735c74ed550$var$appendValue(currentValue, value);\n return;\n }\n this.metadata[key] = [\n currentValue,\n value\n ];\n }\n set(key, value) {\n if (value) this.metadata[key] = value;\n else delete this.metadata[key];\n }\n getMetadata(name) {\n return this.get(name);\n }\n getSingleMetadata(name) {\n return this.getSingle(name);\n }\n /**\n * Reads a metadata value by key. This method supports simple value lookup, as well as fetching single array values.\n *\n * This method deprecates direct property access, eg: metadata['author']\n *\n * @example\n * const metadata = new Metadata({ lyricist: 'Pete', author: ['John', 'Mary'] });\n * metadata.get('lyricist') // => 'Pete'\n * metadata.get('author') // => ['John', 'Mary']\n * metadata.get('author.1') // => 'John'\n * metadata.get('author.2') // => 'Mary'\n *\n * Using a negative index will start counting at the end of the list:\n *\n * const metadata = new Metadata({ lyricist: 'Pete', author: ['John', 'Mary'] });\n * metadata.get('author.-1') // => 'Mary'\n * metadata.get('author.-2') // => 'John'\n *\n * @param prop the property name\n * @returns {Array|String} the metadata value(s). If there is only one value, it will return a String,\n * else it returns an array of strings.\n */ get(prop) {\n if (prop === (0, $b58c551853385714$export$430b1920f5feeae)) return this.calculateKeyFromCapo();\n if (prop in this.metadata) return this.metadata[prop];\n return this.getArrayItem(prop);\n }\n /**\n * Returns a single metadata value. If the actual value is an array, it returns the first value. Else, it returns\n * the value.\n * @ignore\n * @param {string} prop the property name\n * @returns {String} The metadata value\n */ getSingle(prop) {\n const value = this.get(prop);\n if (Array.isArray(value)) return value[0];\n return value;\n }\n parseArrayKey(prop) {\n const match = prop.match(/(.+)\\.(-?\\d+)$/);\n if (!match) return null;\n const key = match[1];\n const index = parseInt(match[2], 10);\n return [\n key,\n index\n ];\n }\n getArrayItem(prop) {\n const parsedKey = this.parseArrayKey(prop);\n if (parsedKey === null) return null;\n const [key, index] = parsedKey;\n const arrayValue = this.metadata[key] || [];\n let itemIndex = index;\n if (itemIndex < 0) itemIndex = arrayValue.length + itemIndex;\n else if (itemIndex > 0) itemIndex -= 1;\n return arrayValue[itemIndex];\n }\n /**\n * Returns a deep clone of this Metadata object\n * @returns {Metadata} the cloned Metadata object\n */ clone() {\n return new $709af735c74ed550$var$Metadata(this.metadata);\n }\n calculateKeyFromCapo() {\n const capoString = this.getSingle((0, $b58c551853385714$export$866f445d49bad88e));\n const keyString = this.getSingle((0, $b58c551853385714$export$7167c830cefcb6b5));\n if (capoString && keyString) {\n const key = (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).parse(keyString);\n if (!key) throw new Error(`Could not parse ${keyString}`);\n const capo = parseInt(capoString, 10);\n return key.transpose(capo).normalize().toString();\n }\n return null;\n }\n assign(metadata) {\n Object.keys(metadata).filter((key)=>!(0, $b58c551853385714$export$3ef04055cb4a269a)(key)).forEach((key)=>{\n const value = metadata[key];\n if (value instanceof Array) this.metadata[key] = [\n ...value\n ];\n else this.metadata[key] = value;\n });\n }\n}\nvar $709af735c74ed550$export$2e2bcd8739ae039 = $709af735c74ed550$var$Metadata;\n\n\n\n\n\n\n\n\n\n\nclass $e96fef8ff540cb26$var$FontSize {\n constructor(fontSize, kind){\n this.fontSize = fontSize;\n this.unit = kind;\n }\n clone() {\n return new $e96fef8ff540cb26$var$FontSize(this.fontSize, this.unit);\n }\n multiply(percentage) {\n return new $e96fef8ff540cb26$var$FontSize(this.fontSize * percentage / 100, this.unit);\n }\n /**\n * Stringifies the font size by concatenating size and unit\n *\n * @example\n * // Returns \"30px\"\n * new FontSize(30, 'px').toString()\n * @example\n * // Returns \"120%\"\n * new FontSize(120, '%').toString()\n *\n * @return {string} The font size\n */ toString() {\n return `${this.fontSize}${this.unit}`;\n }\n static parse(fontSize, parent) {\n const trimmed = fontSize.trim();\n const parsedFontSize = parseFloat(trimmed);\n if (Number.isNaN(parsedFontSize)) return this.parseNotANumber(parent);\n if (trimmed.slice(-1) === '%') return this.parsePercentage(parsedFontSize, parent);\n return new $e96fef8ff540cb26$var$FontSize(parsedFontSize, 'px');\n }\n static parseNotANumber(parent) {\n if (parent) return parent.clone();\n return new $e96fef8ff540cb26$var$FontSize(100, '%');\n }\n static parsePercentage(parsedFontSize, parent) {\n if (parent) return parent.multiply(parsedFontSize);\n return new $e96fef8ff540cb26$var$FontSize(parsedFontSize, '%');\n }\n}\nvar $e96fef8ff540cb26$export$2e2bcd8739ae039 = $e96fef8ff540cb26$var$FontSize;\n\n\n\nclass $6b2474c81fc08fe5$var$FontStack {\n applyTag(tag) {\n switch(tag.name){\n case 0, $b58c551853385714$export$14fe4ba6e94df04d:\n this.textFont.font = this.pushOrPopTag(tag);\n break;\n case 0, $b58c551853385714$export$f0dee7f48597f09a:\n this.textFont.size = this.pushOrPopSizeTag(tag);\n break;\n case 0, $b58c551853385714$export$d2ed2b49c006eb23:\n this.textFont.colour = this.pushOrPopTag(tag);\n break;\n case 0, $b58c551853385714$export$2b0cbe6e95114098:\n this.chordFont.font = this.pushOrPopTag(tag);\n break;\n case 0, $b58c551853385714$export$1f62a95bf5703cac:\n this.chordFont.size = this.pushOrPopSizeTag(tag);\n break;\n case 0, $b58c551853385714$export$f7227d9f34d97bec:\n this.chordFont.colour = this.pushOrPopTag(tag);\n break;\n default:\n break;\n }\n }\n pushOrPopTag(tag) {\n let { value: value } = tag;\n if (tag.hasValue()) this.fontAndColourStacks[tag.name].push(value);\n else {\n this.fontAndColourStacks[tag.name].pop();\n value = this.fontAndColourStacks[tag.name].slice(-1)[0] || null;\n }\n return value;\n }\n pushOrPopSizeTag(tag) {\n const { value: value } = tag;\n if (tag.hasValue()) {\n const parent = this.sizeStacks[tag.name].slice(-1)[0] || null;\n const parsedFontSize = (0, $e96fef8ff540cb26$export$2e2bcd8739ae039).parse(value, parent);\n this.sizeStacks[tag.name].push(parsedFontSize);\n return parsedFontSize;\n }\n this.sizeStacks[tag.name].pop();\n return this.sizeStacks[tag.name].slice(-1)[0] || null;\n }\n constructor(){\n this.fontAndColourStacks = {\n [(0, $b58c551853385714$export$f7227d9f34d97bec)]: [],\n [(0, $b58c551853385714$export$2b0cbe6e95114098)]: [],\n [(0, $b58c551853385714$export$d2ed2b49c006eb23)]: [],\n [(0, $b58c551853385714$export$14fe4ba6e94df04d)]: []\n };\n this.sizeStacks = {\n [(0, $b58c551853385714$export$1f62a95bf5703cac)]: [],\n [(0, $b58c551853385714$export$f0dee7f48597f09a)]: []\n };\n this.textFont = new (0, $7011f990fc73fda8$export$2e2bcd8739ae039)();\n this.chordFont = new (0, $7011f990fc73fda8$export$2e2bcd8739ae039)();\n }\n}\nvar $6b2474c81fc08fe5$export$2e2bcd8739ae039 = $6b2474c81fc08fe5$var$FontStack;\n\n\n/**\n * Represents a parser warning, currently only used by ChordProParser.\n */ class $a204f7467d92fb73$var$ParserWarning {\n /**\n * @hideconstructor\n */ constructor(message, lineNumber, column){\n /**\n * The chord sheet line number on which the warning occurred\n * @member\n * @type {number}\n */ this.lineNumber = null;\n /**\n * The chord sheet column on which the warning occurred\n * @member\n * @type {number}\n */ this.column = null;\n this.message = message;\n this.lineNumber = lineNumber;\n this.column = column;\n }\n /**\n * Returns a stringified version of the warning\n * @returns {string} The string warning\n */ toString() {\n return `Warning: ${this.message} on line ${this.lineNumber || '?'} column ${this.column || '?'}`;\n }\n}\nvar $a204f7467d92fb73$export$2e2bcd8739ae039 = $a204f7467d92fb73$var$ParserWarning;\n\n\nclass $4132ae2381aed81f$var$SongBuilder {\n constructor(song){\n this.currentKey = null;\n this.currentLine = null;\n this.fontStack = new (0, $6b2474c81fc08fe5$export$2e2bcd8739ae039)();\n this.lines = [];\n this.metadata = new (0, $709af735c74ed550$export$2e2bcd8739ae039)();\n this.sectionType = (0, $72b24102c7d826fd$export$c53d0f541b41b88e);\n this.selector = null;\n this.transposeKey = null;\n this.warnings = [];\n this.song = song;\n this.song.lines = this.lines;\n this.song.metadata = this.metadata;\n this.song.warnings = this.warnings;\n }\n get previousLine() {\n const count = this.lines.length;\n if (count >= 2) return this.lines[count - 2];\n return null;\n }\n addLine(line) {\n if (line) this.currentLine = line;\n else {\n this.currentLine = new (0, $a449f9ee1c7acbe4$export$2e2bcd8739ae039)();\n this.lines.push(this.currentLine);\n }\n this.setCurrentProperties(this.sectionType, this.selector);\n this.currentLine.transposeKey = this.transposeKey ?? this.currentKey;\n this.currentLine.key = this.currentKey || this.metadata.getSingle((0, $b58c551853385714$export$7167c830cefcb6b5));\n this.currentLine.lineNumber = this.lines.length - 1;\n return this.currentLine;\n }\n setCurrentProperties(sectionType, selector = null) {\n if (!this.currentLine) throw new Error('Expected this.currentLine to be present');\n this.currentLine.type = sectionType;\n this.currentLine.selector = selector;\n this.currentLine.textFont = this.fontStack.textFont.clone();\n this.currentLine.chordFont = this.fontStack.chordFont.clone();\n }\n addItem(item) {\n if (item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039)) this.addTag(item);\n else {\n this.ensureLine();\n if (!this.currentLine) throw new Error('Expected this.currentLine to be present');\n this.currentLine.addItem(item);\n }\n }\n chords(chr) {\n if (!this.currentLine) throw new Error('Expected this.currentLine to be present');\n this.currentLine.chords(chr);\n }\n lyrics(chr) {\n this.ensureLine();\n if (!this.currentLine) throw new Error('Expected this.currentLine to be present');\n this.currentLine.lyrics(chr);\n }\n addTag(tagContents) {\n const tag = (0, $b58c551853385714$export$2e2bcd8739ae039).parseOrFail(tagContents);\n this.applyTagOnSong(tag);\n this.applyTagOnLine(tag);\n return tag;\n }\n ensureLine() {\n if (this.currentLine === null) this.addLine();\n }\n applyTagOnSong(tag) {\n if (tag.isMetaTag()) this.setMetadata(tag.name, tag.value || '');\n else if (tag.name === (0, $b58c551853385714$export$ae60ab9b4739fc3d)) this.transposeKey = tag.value;\n else if (tag.name === (0, $b58c551853385714$export$b7627374a6424f68)) this.currentKey = tag.value;\n else if (tag.isSectionDelimiter()) this.setSectionTypeFromTag(tag);\n else if (tag.isInlineFontTag()) this.fontStack.applyTag(tag);\n }\n applyTagOnLine(tag) {\n this.ensureLine();\n if (!this.currentLine) throw new Error('Expected this.currentLine to be present');\n this.currentLine.addTag(tag);\n }\n setMetadata(name, value) {\n this.metadata.add(name, value);\n }\n setSectionTypeFromTag(tag) {\n const [tagType, sectionType] = (0, $b58c551853385714$export$2e2bcd8739ae039).recognizeSectionTag(tag.name);\n if (!sectionType) return;\n if (tagType === (0, $b58c551853385714$export$dfea9b8ecbbb8623)) this.startSection(sectionType, tag);\n else if (tagType === (0, $b58c551853385714$export$3d329a2c209fbc28)) this.endSection(sectionType, tag);\n }\n startSection(sectionType, tag) {\n this.checkCurrentSectionType((0, $72b24102c7d826fd$export$c53d0f541b41b88e), tag);\n this.sectionType = sectionType;\n this.selector = tag.selector;\n this.setCurrentProperties(sectionType, tag.selector);\n }\n endSection(sectionType, tag) {\n this.checkCurrentSectionType(sectionType, tag);\n this.sectionType = (0, $72b24102c7d826fd$export$c53d0f541b41b88e);\n this.selector = null;\n }\n checkCurrentSectionType(sectionType, tag) {\n if (this.sectionType !== sectionType) this.addWarning(`Unexpected tag {${tag.originalName}}, current section is: ${this.sectionType}`, tag);\n }\n addWarning(message, { line: line, column: column }) {\n const warning = new (0, $a204f7467d92fb73$export$2e2bcd8739ae039)(message, line || null, column || null);\n this.warnings.push(warning);\n }\n}\nvar $4132ae2381aed81f$export$2e2bcd8739ae039 = $4132ae2381aed81f$var$SongBuilder;\n\n\n\n\n\nconst $b1ccc50afe850396$export$1e6f8e38ccd793b = {\n solfege: [\n 'La',\n 'Sib',\n 'Si',\n 'Do',\n 'Do#',\n 'Reb',\n 'Re',\n 'Mib',\n 'Mi',\n 'Fa',\n 'Fa#',\n 'Solb',\n 'Sol',\n 'Sol#',\n 'Lab'\n ],\n symbol: [\n 'A',\n 'Bb',\n 'B',\n 'C',\n 'C#',\n 'Db',\n 'D',\n 'Eb',\n 'E',\n 'F',\n 'F#',\n 'Gb',\n 'G',\n 'G#',\n 'Ab'\n ]\n};\nconst $b1ccc50afe850396$export$24a0bd6af7756225 = {\n solfege: [\n 'Fa#m',\n 'Solm',\n 'Sol#m',\n 'Lam',\n 'Sibm',\n 'Sim',\n 'Dom',\n 'Do#m',\n 'Rem',\n 'Re#m',\n 'Mibm',\n 'Mim',\n 'Fam'\n ],\n symbol: [\n 'F#m',\n 'Gm',\n 'G#m',\n 'Am',\n 'Bbm',\n 'Bm',\n 'Cm',\n 'C#m',\n 'Dm',\n 'D#m',\n 'Ebm',\n 'Em',\n 'Fm'\n ]\n};\nconst $b1ccc50afe850396$export$1ba61c6fa2f892a9 = {\n solfege: {\n 'Sib': {\n 1: 'La',\n 3: 'Sol',\n 6: 'Mi',\n 8: 'Re',\n 10: 'Do'\n },\n 'Re': {\n 2: 'Do',\n 5: 'La',\n 7: 'Sol',\n 10: 'Mi'\n },\n 'Mib': {\n 1: 'Re',\n 3: 'Do',\n 6: 'La',\n 8: 'Sol'\n },\n 'Db': {\n 1: 'Do',\n 4: 'La',\n 6: 'Sol',\n 9: 'Mi'\n },\n 'Do#': {\n 1: 'Do',\n 4: 'La',\n 6: 'Sol',\n 9: 'Mi'\n },\n 'Mi': {\n 2: 'Re',\n 4: 'Do',\n 7: 'La',\n 9: 'Sol'\n },\n 'Fa': {\n 1: 'Mi',\n 3: 'Re',\n 5: 'Do',\n 6: 'Si',\n 8: 'La',\n 10: 'Sol'\n },\n 'Fa#': {\n 2: 'Mi',\n 4: 'Re',\n 6: 'Do',\n 7: 'Si',\n 9: 'La'\n },\n 'Solb': {\n 2: 'Mi',\n 4: 'Re',\n 6: 'Do',\n 7: 'Si',\n 9: 'La'\n },\n 'Sol': {\n 3: 'Mi',\n 5: 'Re',\n 7: 'Do',\n 8: 'Si',\n 10: 'La'\n },\n 'Sol#': {\n 1: 'Sol',\n 4: 'Mi',\n 6: 'Re',\n 8: 'Do'\n },\n 'Lab': {\n 1: 'Sol',\n 4: 'Mi',\n 6: 'Re',\n 8: 'Do'\n },\n 'La': {\n 2: 'Sol',\n 5: 'Mi',\n 7: 'Re',\n 9: 'Do'\n },\n 'Si': {\n 2: 'La',\n 4: 'Sol',\n 7: 'Mi',\n 9: 'Re'\n },\n 'Do': {\n 3: 'La',\n 5: 'Sol',\n 8: 'Mi',\n 10: 'Re'\n },\n 'Lam': {\n 3: 'Fa#m',\n 5: 'Mim',\n 7: 'Rem'\n },\n 'Sibm': {\n 1: 'Lam',\n 4: 'Fa#m',\n 6: 'Mim',\n 8: 'Rem'\n },\n 'Sim': {\n 2: 'Lam',\n 5: 'Fa#m',\n 7: 'Mim'\n },\n 'Dom': {\n 1: 'Sim',\n 3: 'Lam',\n 6: 'Fa#m',\n 8: 'Mim'\n },\n 'Do#m': {\n 2: 'Sim',\n 4: 'Lam',\n 7: 'Fa#m',\n 9: 'Mim'\n },\n 'Rem': {\n 3: 'Sim',\n 5: 'Lam',\n 8: 'Fa#m'\n },\n 'Mibm': {\n 1: 'Rem',\n 4: 'Sim',\n 6: 'Lam'\n },\n 'Re#m': {\n 1: 'Rem',\n 4: 'Sim',\n 6: 'Lam'\n }\n },\n symbol: {\n 'Bb': {\n 1: 'A',\n 3: 'G',\n 6: 'E',\n 8: 'D',\n 10: 'C'\n },\n 'D': {\n 2: 'C',\n 5: 'A',\n 7: 'G',\n 10: 'E'\n },\n 'Eb': {\n 1: 'D',\n 3: 'C',\n 6: 'A',\n 8: 'G'\n },\n 'Db': {\n 1: 'C',\n 4: 'A',\n 6: 'G',\n 9: 'E'\n },\n 'C#': {\n 1: 'C',\n 4: 'A',\n 6: 'G',\n 9: 'E'\n },\n 'E': {\n 2: 'D',\n 4: 'C',\n 7: 'A',\n 9: 'G'\n },\n 'F': {\n 1: 'E',\n 3: 'D',\n 5: 'C',\n 6: 'B',\n 8: 'A',\n 10: 'G'\n },\n 'F#': {\n 2: 'E',\n 4: 'D',\n 6: 'C',\n 7: 'B',\n 9: 'A'\n },\n 'Gb': {\n 2: 'E',\n 4: 'D',\n 6: 'C',\n 7: 'B',\n 9: 'A'\n },\n 'G': {\n 3: 'E',\n 5: 'D',\n 7: 'C',\n 8: 'B',\n 10: 'A'\n },\n 'G#': {\n 1: 'G',\n 4: 'E',\n 6: 'D',\n 8: 'C'\n },\n 'Ab': {\n 1: 'G',\n 4: 'E',\n 6: 'D',\n 8: 'C'\n },\n 'A': {\n 2: 'G',\n 5: 'E',\n 7: 'D',\n 9: 'C'\n },\n 'B': {\n 2: 'A',\n 4: 'G',\n 7: 'E',\n 9: 'D'\n },\n 'C': {\n 3: 'A',\n 5: 'G',\n 8: 'E',\n 10: 'D'\n },\n 'Am': {\n 3: 'F#m',\n 5: 'Em',\n 7: 'Dm'\n },\n 'Bbm': {\n 1: 'Am',\n 4: 'F#m',\n 6: 'Em',\n 8: 'Dm'\n },\n 'Bm': {\n 2: 'Am',\n 5: 'F#m',\n 7: 'Em'\n },\n 'Cm': {\n 1: 'Bm',\n 3: 'Am',\n 6: 'F#m',\n 8: 'Em'\n },\n 'C#m': {\n 2: 'Bm',\n 4: 'Am',\n 7: 'F#m',\n 9: 'Em'\n },\n 'Dm': {\n 3: 'Bm',\n 5: 'Am',\n 8: 'F#m'\n },\n 'Ebm': {\n 1: 'Dm',\n 4: 'Bm',\n 6: 'Am'\n },\n 'D#m': {\n 1: 'Dm',\n 4: 'Bm',\n 6: 'Am'\n }\n }\n};\n\n\n\nfunction $f5b90e5dc4871932$export$fd31a53e6281557e(transposeKey, songKey) {\n if (/^\\d+$/.test(transposeKey)) return parseInt(transposeKey, 10);\n return (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).distance(songKey, transposeKey);\n}\nfunction $f5b90e5dc4871932$var$chordTransposeDistance(capo, transposeKey, songKey, renderKey) {\n let transpose = -1 * (capo || 0);\n if (songKey) {\n if (transposeKey) transpose += $f5b90e5dc4871932$export$fd31a53e6281557e(transposeKey, songKey);\n if (renderKey) transpose += (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).distance(songKey, renderKey);\n }\n return transpose;\n}\nfunction $f5b90e5dc4871932$var$changeChordType(chord, type, referenceKey) {\n switch(type){\n case 'symbol':\n return chord.toChordSymbol(referenceKey);\n case 'solfege':\n return chord.toChordSolfege(referenceKey);\n case 'numeral':\n return chord.toNumeral(referenceKey);\n case 'number':\n return chord.toNumeric(referenceKey);\n default:\n return chord;\n }\n}\nfunction $f5b90e5dc4871932$var$effectiveModifier(renderKey, contextKey) {\n if (renderKey?.modifier) return renderKey.modifier;\n if (contextKey?.modifier) return contextKey.modifier;\n return null;\n}\nfunction $f5b90e5dc4871932$var$shapeChord({ chord: chord, effectiveTransposeDistance: effectiveTransposeDistance, modifier: modifier, normalizeChords: normalizeChords, effectiveKey: effectiveKey, chordStyle: chordStyle }) {\n const transposedChord = chord.transpose(effectiveTransposeDistance);\n const correctedChord = modifier ? transposedChord.useModifier(modifier) : transposedChord;\n const normalizedChord = normalizeChords ? correctedChord.normalize(effectiveKey) : transposedChord;\n return $f5b90e5dc4871932$var$changeChordType(normalizedChord, chordStyle, effectiveKey);\n}\nfunction $f5b90e5dc4871932$export$596ec52955da9472(chordString, line, song, { renderKey: renderKey = null, useUnicodeModifier: useUnicodeModifier = false, normalizeChords: normalizeChords = true, decapo: decapo = false } = {}) {\n const chord = (0, $f0449e2486cb2372$export$2e2bcd8739ae039).parse(chordString);\n if (!chord) return chordString;\n const songKey = song.key;\n const capoString = song.metadata.getSingle((0, $b58c551853385714$export$866f445d49bad88e));\n const capo = decapo && capoString ? parseInt(capoString, 10) : null;\n const chordStyle = song.metadata.getSingle((0, $b58c551853385714$export$d8cbdf44b1f66df1));\n const effectiveTransposeDistance = $f5b90e5dc4871932$var$chordTransposeDistance(capo, line.transposeKey, songKey, renderKey);\n const contextKey = (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).wrap(line.key || song.key);\n const modifier = $f5b90e5dc4871932$var$effectiveModifier(renderKey, contextKey);\n const effectiveKey = renderKey || contextKey?.transpose(effectiveTransposeDistance) || null;\n return $f5b90e5dc4871932$var$shapeChord({\n chord: chord,\n effectiveTransposeDistance: effectiveTransposeDistance,\n modifier: modifier,\n normalizeChords: normalizeChords,\n effectiveKey: effectiveKey,\n chordStyle: chordStyle\n }).toString({\n useUnicodeModifier: useUnicodeModifier\n });\n}\nfunction $f5b90e5dc4871932$export$b07b16221c14aaa(key) {\n const keyObj = (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).wrapOrFail(key);\n const chordType = keyObj.type === 'solfege' ? 'solfege' : 'symbol';\n return (0, $b1ccc50afe850396$export$1ba61c6fa2f892a9)[chordType][(0, $4d72f408c2526a1c$export$2e2bcd8739ae039).toString(key)];\n}\nfunction $f5b90e5dc4871932$export$74743eda5dda3ccf(key) {\n const keyObj = (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).wrapOrFail(key);\n const chordType = keyObj.type === 'solfege' ? 'solfege' : 'symbol';\n return keyObj.isMinor() ? (0, $b1ccc50afe850396$export$24a0bd6af7756225)[chordType] : (0, $b1ccc50afe850396$export$1e6f8e38ccd793b)[chordType];\n}\nfunction $f5b90e5dc4871932$export$efb38dd75b8e2957({ selector: selector, isNegated: isNegated }, { configuration: configuration, metadata: metadata }) {\n if (selector === configuration.instrument?.type) return !isNegated;\n if (selector === configuration.user?.name) return !isNegated;\n const metadataValue = metadata.getSingle(selector);\n const metadataValueTruthy = metadataValue && metadataValue !== '';\n return isNegated ? !metadataValueTruthy : !!metadataValueTruthy;\n}\n\n\n/**\n * Represents a song in a chord sheet. Currently a chord sheet can only have one song.\n */ class $962eb86a322c5cfb$var$Song extends (0, $56f32ce29e8cb670$export$2e2bcd8739ae039) {\n /**\n * Creates a new {Song} instance\n * @param metadata {Object|Metadata} predefined metadata\n */ constructor(metadata = {}){\n super(), /**\n * The {@link Line} items of which the song consists\n * @member {Line[]}\n */ this.lines = [], this._bodyLines = null, this._bodyParagraphs = null, this.warnings = [];\n this.metadata = new (0, $709af735c74ed550$export$2e2bcd8739ae039)(metadata);\n }\n /**\n * Returns the song lines, skipping the leading empty lines (empty as in not rendering any content). This is useful\n * if you want to skip the \"header lines\": the lines that only contain meta data.\n * @returns {Line[]} The song body lines\n */ get bodyLines() {\n if (!this._bodyLines) this._bodyLines = this.selectRenderableItems(this.lines);\n return this._bodyLines;\n }\n /**\n * Returns the song paragraphs, skipping the paragraphs that only contain empty lines\n * (empty as in not rendering any content)\n * @see {@link bodyLines}\n * @returns {Paragraph[]}\n */ get bodyParagraphs() {\n if (!this._bodyParagraphs) this._bodyParagraphs = this.selectRenderableItems(this.paragraphs);\n return this._bodyParagraphs;\n }\n selectRenderableItems(items) {\n const copy = [\n ...items\n ];\n while(copy.length && !copy[0].hasRenderableItems())copy.shift();\n return copy;\n }\n expandLine(line) {\n const expandedLines = line.items.flatMap((item)=>{\n if (item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039) && item.name === (0, $b58c551853385714$export$8db6c706fc9142b2)) return this.getLastChorusBefore(line.lineNumber);\n return [];\n });\n return [\n line,\n ...expandedLines\n ];\n }\n getLastChorusBefore(lineNumber) {\n const lines = [];\n if (!lineNumber) return lines;\n for(let i = lineNumber - 1; i >= 0; i -= 1){\n const line = this.lines[i];\n if (line.type === (0, $72b24102c7d826fd$export$8db6c706fc9142b2)) {\n const filteredLine = this.filterChorusStartEndDirectives(line);\n if (!(line.isNotEmpty() && filteredLine.isEmpty())) lines.unshift(line);\n } else if (lines.length > 0) break;\n }\n return lines;\n }\n filterChorusStartEndDirectives(line) {\n return line.mapItems((item)=>{\n if (item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039)) {\n if (item.name === (0, $b58c551853385714$export$4f5168acae064e01) || item.name === (0, $b58c551853385714$export$473c1a4819e5180b)) return null;\n }\n return item;\n });\n }\n /**\n * The {@link Paragraph} items of which the song consists\n * @member {Paragraph[]}\n */ get paragraphs() {\n return this.linesToParagraphs(this.lines);\n }\n /**\n * The body paragraphs of the song, with any `{chorus}` tag expanded into the targeted chorus\n * @type {Paragraph[]}\n */ get expandedBodyParagraphs() {\n return this.selectRenderableItems(this.linesToParagraphs(this.lines.flatMap((line)=>this.expandLine(line))));\n }\n linesToParagraphs(lines) {\n let currentParagraph = new (0, $ca405333ab46d462$export$2e2bcd8739ae039)();\n const paragraphs = [\n currentParagraph\n ];\n lines.forEach((line, index)=>{\n const nextLine = lines[index + 1] || null;\n if (line.isEmpty() || line.isSectionEnd() && nextLine && !nextLine.isEmpty()) {\n currentParagraph = new (0, $ca405333ab46d462$export$2e2bcd8739ae039)();\n paragraphs.push(currentParagraph);\n } else if (line.hasRenderableItems()) currentParagraph.addLine(line);\n });\n return paragraphs;\n }\n /**\n * Returns a deep clone of the song\n * @returns {Song} The cloned song\n */ clone() {\n return this.mapItems((item)=>item);\n }\n setMetadata(name, value) {\n this.metadata.add(name, value);\n }\n getMetadata(name) {\n return this.metadata.getMetadata(name);\n }\n getSingleMetadata(name) {\n return this.metadata.getSingleMetadata(name);\n }\n /**\n * Returns a copy of the song with the key value set to the specified key. It changes:\n * - the value for `key` in the {@link metadata} set\n * - any existing `key` directive\n * @param {number|null} key the key. Passing `null` will:\n * - remove the current key from {@link metadata}\n * - remove any `key` directive\n * @returns {Song} The changed song\n */ setKey(key) {\n const strKey = key ? key.toString() : null;\n return this.changeMetadata((0, $b58c551853385714$export$7167c830cefcb6b5), strKey);\n }\n /**\n * Returns a copy of the song with the key value set to the specified capo. It changes:\n * - the value for `capo` in the {@link metadata} set\n * - any existing `capo` directive\n * @param {number|null} capo the capo. Passing `null` will:\n * - remove the current key from {@link metadata}\n * - remove any `capo` directive\n * @returns {Song} The changed song\n */ setCapo(capo) {\n const strCapo = capo ? capo.toString() : null;\n return this.changeMetadata((0, $b58c551853385714$export$866f445d49bad88e), strCapo);\n }\n setDirective(name, value) {\n if (value === null) return this.removeItem((item)=>item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039) && item.name === name);\n return this.updateItem((item)=>item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039) && item.name === name, (item)=>'set' in item ? item.set({\n value: value\n }) : item, (song)=>song.insertDirective(name, value));\n }\n /**\n * Transposes the song by the specified delta. It will:\n * - transpose all chords, see: {@link Chord#transpose}\n * - transpose the song key in {@link metadata}\n * - update any existing `key` directive\n * @param {number} delta The number of semitones (positive or negative) to transpose with\n * @param {Object} [options={}] options\n * @param {boolean} [options.normalizeChordSuffix=false] whether to normalize the chord suffixes after transposing\n * @returns {Song} The transposed song\n */ transpose(delta, { modifier: modifier, normalizeChordSuffix: normalizeChordSuffix = false } = {}) {\n let transposedKey = null;\n const song = this;\n return song.mapItems((item)=>{\n if (item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039) && item.name === (0, $b58c551853385714$export$7167c830cefcb6b5)) {\n transposedKey = (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).wrapOrFail(item.value).transpose(delta);\n if (modifier) transposedKey = transposedKey.useModifier(modifier);\n return item.set({\n value: transposedKey.toString()\n });\n }\n if (item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039)) {\n let chord = item.transpose(delta, transposedKey, {\n normalizeChordSuffix: normalizeChordSuffix\n });\n if (modifier) chord = chord.useModifier(modifier);\n return chord;\n }\n return item;\n });\n }\n /**\n * Transposes the song up by one semitone. It will:\n * - transpose all chords, see: {@link Chord#transpose}\n * - transpose the song key in {@link metadata}\n * - update any existing `key` directive\n * @param {Object} [options={}] options\n * @param {boolean} [options.normalizeChordSuffix=false] whether to normalize the chord suffixes after transposing\n * @returns {Song} The transposed song\n */ transposeUp({ normalizeChordSuffix: normalizeChordSuffix = false } = {}) {\n return this.transpose(1, {\n normalizeChordSuffix: normalizeChordSuffix\n });\n }\n /**\n * Transposes the song down by one semitone. It will:\n * - transpose all chords, see: {@link Chord#transpose}\n * - transpose the song key in {@link metadata}\n * - update any existing `key` directive\n * @param {Object} [options={}] options\n * @param {boolean} [options.normalizeChordSuffix=false] whether to normalize the chord suffixes after transposing\n * @returns {Song} The transposed song\n */ transposeDown({ normalizeChordSuffix: normalizeChordSuffix = false } = {}) {\n return this.transpose(-1, {\n normalizeChordSuffix: normalizeChordSuffix\n });\n }\n /**\n * Returns a copy of the song with the key set to the specified key. It changes:\n * - the value for `key` in the {@link metadata} set\n * - any existing `key` directive\n * - all chords, those are transposed according to the distance between the current and the new key\n * @param {string} newKey The new key.\n * @returns {Song} The changed song\n */ changeKey(newKey) {\n const currentKey = this.requireCurrentKey();\n const targetKey = (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).wrapOrFail(newKey);\n const delta = currentKey.distanceTo(targetKey);\n const transposedSong = this.transpose(delta, {\n modifier: targetKey.modifier\n });\n if (targetKey.modifier) return transposedSong.useModifier(targetKey.modifier);\n return transposedSong;\n }\n /**\n * Returns a copy of the song with all chords changed to the specified modifier.\n *\n * Examples:\n *\n * ```js\n * song.useModifier('#');\n * song.useModifier('b');\n * ```\n *\n * @param {Modifier} modifier the new modifier\n * @returns {Song} the changed song\n */ useModifier(modifier) {\n return this.mapItems((item)=>{\n if (item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039)) return item.useModifier(modifier);\n return item;\n });\n }\n requireCurrentKey() {\n const wrappedKey = (0, $4d72f408c2526a1c$export$2e2bcd8739ae039).wrap(this.key);\n if (!wrappedKey) throw new Error(`\nCannot change song key, the original key is unknown.\n\nEither ensure a key directive is present in the song (when using chordpro):\n \\`{key: C}\\`\n\nOr set the song key before changing key:\n \\`song.setKey('C');\\``.substring(1));\n return wrappedKey;\n }\n /**\n * Returns a copy of the song with the directive value set to the specified value.\n * - when there is a matching directive in the song, it will update the directive\n * - when there is no matching directive, it will be inserted\n * If `value` is `null` it will act as a delete, any directive matching `name` will be removed.\n * @param {string} name The directive name\n * @param {string | null} value The value to set, or `null` to remove the directive\n */ changeMetadata(name, value) {\n const updatedSong = this.setDirective(name, value);\n updatedSong.metadata.set(name, value);\n return updatedSong;\n }\n insertDirective(name, value, { after: after = null } = {}) {\n const insertIndex = this.lines.findIndex((line)=>line.items.some((item)=>!(item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039)) || after && item.name === after));\n const newLine = new (0, $a449f9ee1c7acbe4$export$2e2bcd8739ae039)();\n newLine.addTag(name, value);\n const clonedSong = this.clone();\n const { lines: lines } = clonedSong;\n clonedSong.lines = [\n ...lines.slice(0, insertIndex),\n newLine,\n ...lines.slice(insertIndex)\n ];\n return clonedSong;\n }\n addLine(line) {\n this.lines.push(line);\n }\n /**\n * Change the song contents inline. Return a new {@link Item} to replace it. Return `null` to remove it.\n * @example\n * // transpose all chords:\n * song.mapItems((item) => {\n * if (item instanceof ChordLyricsPair) {\n * return item.transpose(2, 'D');\n * }\n *\n * return item;\n * });\n * @param {MapItemsCallback} func the callback function\n * @returns {Song} the changed song\n */ mapItems(func) {\n const clonedSong = new $962eb86a322c5cfb$var$Song();\n const builder = new (0, $4132ae2381aed81f$export$2e2bcd8739ae039)(clonedSong);\n this.lines.forEach((line)=>{\n builder.addLine();\n line.items.forEach((item)=>{\n const changedItem = func(item);\n if (changedItem) builder.addItem(changedItem);\n });\n });\n return clonedSong;\n }\n foreachItem(func) {\n this.lines.forEach((line)=>{\n line.items.forEach(func);\n });\n }\n /**\n * Returns all unique chords used in the song\n * @returns {string[]} the chords\n */ getChords() {\n const chords = new Set();\n this.foreachItem((item)=>{\n if (!(item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039))) return;\n const itemChords = item.chords;\n if (itemChords && itemChords.length > 0) {\n const parsedChord = (0, $f0449e2486cb2372$export$2e2bcd8739ae039).parse(itemChords);\n if (parsedChord) chords.add(parsedChord.toString());\n }\n });\n return Array.from(chords);\n }\n /**\n * Returns all chord definitions from the song.\n * Definitions are made using the `{chord}` or `{define}` directive.\n * A chord definitions overrides a previous chord definition for the exact same chord.\n * @returns {Record} the chord definitions\n * @see https://chordpro.org/chordpro/directives-define/\n * @see https://chordpro.org/chordpro/directives-chord/\n */ getChordDefinitions(context) {\n const chordDefinitions = {};\n this.foreachItem((item)=>{\n if (!(item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039))) return;\n const { chordDefinition: chordDefinition, selector: selector, isNegated: isNegated } = item;\n if (selector && context && !(0, $f5b90e5dc4871932$export$efb38dd75b8e2957)({\n selector: selector,\n isNegated: isNegated\n }, context)) return;\n if (chordDefinition) chordDefinitions[chordDefinition.name] = chordDefinition.clone();\n });\n return chordDefinitions;\n }\n /**\n * Change the song contents inline. Return a new {@link Line} to replace it. Return `null` to remove it.\n * @example\n * // remove lines with only Tags:\n * song.mapLines((line) => {\n * if (line.items.every(item => item instanceof Tag)) {\n * return null;\n * }\n *\n * return line;\n * });\n * @param {MapLinesCallback} func the callback function\n * @returns {Song} the changed song\n */ mapLines(func) {\n const clonedSong = new $962eb86a322c5cfb$var$Song();\n const builder = new (0, $4132ae2381aed81f$export$2e2bcd8739ae039)(clonedSong);\n this.lines.forEach((line)=>{\n const changedLine = func(line);\n if (changedLine) {\n builder.addLine();\n changedLine.items.forEach((item)=>builder.addItem(item));\n }\n });\n return clonedSong;\n }\n updateItem(findCallback, updateCallback, notFoundCallback) {\n let found = false;\n const updatedSong = this.mapItems((item)=>{\n if (findCallback(item)) {\n found = true;\n return updateCallback(item);\n }\n return item;\n });\n if (!found) return notFoundCallback(updatedSong);\n return updatedSong;\n }\n removeItem(callback) {\n return this.mapLines((line)=>{\n const { items: items } = line;\n const index = items.findIndex(callback);\n if (index === -1) return line;\n if (items.length === 1) return null;\n return line.set({\n items: [\n ...items.slice(0, index),\n ...items.slice(index + 1)\n ]\n });\n });\n }\n}\nvar $962eb86a322c5cfb$export$2e2bcd8739ae039 = $962eb86a322c5cfb$var$Song;\n\n\n\n\n\n\n\n\n\n\n\nconst $6f86ed99ed3b8cb9$var$CHORD_LYRICS_PAIR = 'chordLyricsPair';\nconst $6f86ed99ed3b8cb9$var$CHORD_SHEET = 'chordSheet';\nconst $6f86ed99ed3b8cb9$var$COMMENT = 'comment';\nconst $6f86ed99ed3b8cb9$var$LINE = 'line';\nconst $6f86ed99ed3b8cb9$var$SOFT_LINE_BREAK = 'softLineBreak';\nconst $6f86ed99ed3b8cb9$var$TAG = 'tag';\nconst $6f86ed99ed3b8cb9$var$TERNARY = 'ternary';\n/**\n * Serializes a song into een plain object, and deserializes the serialized object back into a {@link Song}\n */ class $6f86ed99ed3b8cb9$var$ChordSheetSerializer {\n /**\n * Serializes the chord sheet to a plain object, which can be converted to any format like JSON, XML etc\n * Can be deserialized using {@link deserialize}\n * @returns object A plain JS object containing all chord sheet data\n */ serialize(song) {\n return {\n type: $6f86ed99ed3b8cb9$var$CHORD_SHEET,\n lines: song.lines.map((line)=>this.serializeLine(line))\n };\n }\n serializeLine(line) {\n return {\n type: $6f86ed99ed3b8cb9$var$LINE,\n items: line.items.map((item)=>this.serializeItem(item))\n };\n }\n serializeItem(item) {\n if (item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039)) return this.serializeTag(item);\n if (item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039)) return this.serializeChordLyricsPair(item);\n if (item instanceof (0, $4afcde69e7cb3e85$export$2e2bcd8739ae039)) return this.serializeTernary(item);\n if (item instanceof (0, $34ab5875df061287$export$2e2bcd8739ae039)) return this.serializeLiteral(item);\n if (item instanceof (0, $acbb1127ce68c11a$export$2e2bcd8739ae039)) return this.serializeComment(item);\n if (item instanceof (0, $4c3a42e9543eea65$export$2e2bcd8739ae039)) return {\n type: $6f86ed99ed3b8cb9$var$SOFT_LINE_BREAK\n };\n throw new Error(`Don't know how to serialize ${item.constructor.name}`);\n }\n serializeChordDefinition(chordDefinition) {\n return {\n name: chordDefinition.name,\n baseFret: chordDefinition.baseFret,\n frets: chordDefinition.frets,\n fingers: chordDefinition.fingers\n };\n }\n serializeTag(tag) {\n const serializedTag = {\n type: $6f86ed99ed3b8cb9$var$TAG,\n name: tag.originalName,\n value: tag.value,\n attributes: tag.attributes || {}\n };\n if (tag.chordDefinition) serializedTag.chordDefinition = this.serializeChordDefinition(tag.chordDefinition);\n return serializedTag;\n }\n serializeChordLyricsPair(chordLyricsPair) {\n return {\n type: $6f86ed99ed3b8cb9$var$CHORD_LYRICS_PAIR,\n chords: chordLyricsPair.chords,\n chord: null,\n lyrics: chordLyricsPair.lyrics,\n annotation: chordLyricsPair.annotation\n };\n }\n serializeTernary(ternary) {\n return {\n type: $6f86ed99ed3b8cb9$var$TERNARY,\n variable: ternary.variable,\n valueTest: ternary.valueTest,\n trueExpression: this.serializeExpression(ternary.trueExpression),\n falseExpression: this.serializeExpression(ternary.falseExpression)\n };\n }\n serializeLiteral(literal) {\n return literal.string;\n }\n serializeExpression(expression) {\n return expression.map((part)=>this.serializeItem(part));\n }\n serializeComment(comment) {\n return {\n type: $6f86ed99ed3b8cb9$var$COMMENT,\n comment: comment.content\n };\n }\n /**\n * Deserializes a song that has been serialized using {@link serialize}\n * @param {object} serializedSong The serialized song\n * @returns {Song} The deserialized song\n */ deserialize(serializedSong) {\n this.parseAstComponent(serializedSong);\n return this.song;\n }\n parseAstComponent(astComponent) {\n if (typeof astComponent === 'string') return new (0, $34ab5875df061287$export$2e2bcd8739ae039)(astComponent);\n switch(astComponent.type){\n case $6f86ed99ed3b8cb9$var$CHORD_SHEET:\n this.parseChordSheet(astComponent);\n break;\n case $6f86ed99ed3b8cb9$var$CHORD_LYRICS_PAIR:\n return this.parseChordLyricsPair(astComponent);\n case $6f86ed99ed3b8cb9$var$COMMENT:\n return this.parseComment(astComponent);\n case $6f86ed99ed3b8cb9$var$SOFT_LINE_BREAK:\n return new (0, $4c3a42e9543eea65$export$2e2bcd8739ae039)();\n case $6f86ed99ed3b8cb9$var$TAG:\n return this.parseTag(astComponent);\n case $6f86ed99ed3b8cb9$var$TERNARY:\n return this.parseTernary(astComponent);\n case $6f86ed99ed3b8cb9$var$LINE:\n this.parseLine(astComponent);\n break;\n default:\n (0, $f52913d8767c6236$export$c106dd0671a0fc2d)(`Unhandled AST component \"${astComponent.type}\"`);\n }\n return null;\n }\n parseChordSheet(astComponent) {\n const { lines: lines } = astComponent;\n this.song = new (0, $962eb86a322c5cfb$export$2e2bcd8739ae039)();\n this.songBuilder = new (0, $4132ae2381aed81f$export$2e2bcd8739ae039)(this.song);\n lines.forEach((line)=>this.parseAstComponent(line));\n }\n parseLine(astComponent) {\n const { items: items } = astComponent;\n this.songBuilder.addLine();\n items.forEach((item)=>{\n const parsedItem = this.parseAstComponent(item);\n this.songBuilder.addItem(parsedItem);\n });\n }\n parseChordLyricsPair(astComponent) {\n const { chord: chord, chords: chords, lyrics: lyrics, annotation: annotation } = astComponent;\n return new (0, $0d04ced54ebef610$export$2e2bcd8739ae039)(chord ? new (0, $f0449e2486cb2372$export$2e2bcd8739ae039)(chord).toString() : chords, lyrics, annotation);\n }\n parseTag(astComponent) {\n const { name: name, value: value, location: { offset: offset = null, line: line = null, column: column = null } = {}, chordDefinition: chordDefinition, attributes: attributes, selector: selector, isNegated: isNegated } = astComponent;\n const tag = new (0, $b58c551853385714$export$2e2bcd8739ae039)(name, value, {\n line: line,\n column: column,\n offset: offset\n }, attributes);\n tag.selector = selector || null;\n tag.isNegated = isNegated || false;\n if (chordDefinition) tag.chordDefinition = new (0, $9fb93292861ee876$export$2e2bcd8739ae039)(chordDefinition.name, chordDefinition.baseFret, chordDefinition.frets, chordDefinition.fingers);\n return tag;\n }\n parseComment(astComponent) {\n const { comment: comment } = astComponent;\n return new (0, $acbb1127ce68c11a$export$2e2bcd8739ae039)(comment);\n }\n parseTernary(astComponent) {\n const { variable: variable, valueTest: valueTest, trueExpression: trueExpression, falseExpression: falseExpression, location: { offset: offset = null, line: line = null, column: column = null } = {} } = astComponent;\n return new (0, $4afcde69e7cb3e85$export$2e2bcd8739ae039)({\n variable: variable,\n valueTest: valueTest,\n trueExpression: this.parseExpression(trueExpression),\n falseExpression: this.parseExpression(falseExpression),\n offset: offset,\n line: line,\n column: column\n });\n }\n parseExpression(expression) {\n return (expression || []).map((part)=>this.parseAstComponent(part)).filter((part)=>part !== null);\n }\n constructor(){\n this.song = new (0, $962eb86a322c5cfb$export$2e2bcd8739ae039)();\n this.songBuilder = new (0, $4132ae2381aed81f$export$2e2bcd8739ae039)(this.song);\n }\n}\nvar $6f86ed99ed3b8cb9$export$2e2bcd8739ae039 = $6f86ed99ed3b8cb9$var$ChordSheetSerializer;\n\n\nclass $a68b1ca180ade890$var$NullTracer {\n trace() {}\n}\nvar $a68b1ca180ade890$export$2e2bcd8739ae039 = $a68b1ca180ade890$var$NullTracer;\n\n\n/**\n * Parses a ChordPro chord sheet\n */ class $6ba1c85836253a53$var$ChordProParser {\n /**\n * All warnings raised during parsing the chord sheet\n * @member\n * @type {ParserWarning[]}\n */ get warnings() {\n return this.song?.warnings || [];\n }\n /**\n * Parses a ChordPro chord sheet into a song\n * @param {string} chordSheet the ChordPro chord sheet\n * @param {ChordProParserOptions} options Parser options.\n * @param {ChordProParserOptions.softLineBreaks} options.softLineBreaks=false If true, a backslash\n * followed by * a space is treated as a soft line break\n * @param {ChordProParserOptions.chopFirstWord} options.chopFirstWord=true If true, only the first lyric\n * word is paired with the chord, the rest of the lyric is put in a separate chord lyric pair\n * @see https://peggyjs.org/documentation.html#using-the-parser\n * @returns {Song} The parsed song\n */ parse(chordSheet, options) {\n const ast = (0, $d19fa9f128cdbd26$export$98e6a39c04603d36)((0, $f52913d8767c6236$export$ba13e0e2f19e61a1)(chordSheet), {\n tracer: new (0, $a68b1ca180ade890$export$2e2bcd8739ae039)(),\n ...options\n });\n this.song = new (0, $6f86ed99ed3b8cb9$export$2e2bcd8739ae039)().deserialize(ast);\n return this.song;\n }\n}\nvar $6ba1c85836253a53$export$2e2bcd8739ae039 = $6ba1c85836253a53$var$ChordProParser;\n\n\n/* eslint max-len: 0 */ \n\n\n\nconst $f46090a0372cd33a$var$WHITE_SPACE = /\\s/;\nconst $f46090a0372cd33a$var$CHORD_LINE_REGEX = /^\\s*((([A-G|Do|Re|Mi|Fa|Sol|La|Si])(#|b)?([^/\\s]*)(\\/([A-G|Do|Re|Mi|Fa|Sol|La|Si])(#|b)?)?)(\\s|$)+)+(\\s|$)+/;\n/**\n * Parses a normal chord sheet\n *\n * ChordSheetParser is deprecated, please use ChordsOverWordsParser.\n *\n * ChordsOverWordsParser aims to support any kind of chord, whereas ChordSheetParser lacks\n * support for many variations. Besides that, some chordpro feature have been ported back\n * to ChordsOverWordsParser, which adds some interesting functionality.\n */ class $f46090a0372cd33a$var$ChordSheetParser {\n /**\n * Instantiate a chord sheet parser\n * ChordSheetParser is deprecated, please use ChordsOverWordsParser.\n * @param {Object} [options={}] options\n * @param {boolean} [options.preserveWhitespace=true] whether to preserve trailing whitespace for chords\n * @deprecated\n */ constructor({ preserveWhitespace: preserveWhitespace = true } = {}, showDeprecationWarning = true){\n this.processingText = true;\n this.preserveWhitespace = true;\n this.song = new (0, $962eb86a322c5cfb$export$2e2bcd8739ae039)();\n this.songBuilder = new (0, $4132ae2381aed81f$export$2e2bcd8739ae039)(this.song);\n this.songLine = null;\n this.chordLyricsPair = null;\n this.lines = [];\n this.currentLine = 0;\n this.lineCount = 0;\n if (showDeprecationWarning) (0, $f52913d8767c6236$export$b680e6b2c82f8c2f)(`ChordSheetParser is deprecated, please use ChordsOverWordsParser.\n\n ChordsOverWordsParser aims to support any kind of chord, whereas ChordSheetParser lacks\n support for many variations. Besides that, some chordpro feature have been ported back\n to ChordsOverWordsParser, which adds some interesting functionality.`);\n this.preserveWhitespace = preserveWhitespace;\n }\n /**\n * Parses a chord sheet into a song\n * @param {string} chordSheet The ChordPro chord sheet\n * @param {Object} [options={}] Optional parser options\n * @param {Song} [options.song=null] The {@link Song} to store the song data in\n * @returns {Song} The parsed song\n */ parse(chordSheet, { song: song } = {}) {\n this.initialize(chordSheet, song);\n while(this.hasNextLine()){\n const line = this.readLine();\n this.parseLine(line);\n }\n this.endOfSong();\n return this.song;\n }\n endOfSong() {}\n parseLine(line) {\n this.songLine = this.songBuilder.addLine();\n if (line.trim().length === 0) this.chordLyricsPair = null;\n else this.parseNonEmptyLine(line);\n }\n parseNonEmptyLine(line) {\n if (!this.songLine) throw new Error('Expected this.songLine to be present');\n this.chordLyricsPair = this.songLine.addChordLyricsPair();\n if ($f46090a0372cd33a$var$CHORD_LINE_REGEX.test(line) && this.hasNextLine()) {\n const nextLine = this.readLine();\n this.parseLyricsWithChords(line, nextLine);\n } else this.chordLyricsPair.lyrics = `${line}`;\n }\n initialize(document, song = null) {\n if (song) this.song = song;\n this.lines = (0, $f52913d8767c6236$export$ba13e0e2f19e61a1)(document).split('\\n');\n this.currentLine = 0;\n this.lineCount = this.lines.length;\n this.processingText = true;\n }\n readLine() {\n const line = this.lines[this.currentLine];\n this.currentLine += 1;\n return line;\n }\n hasNextLine() {\n return this.currentLine < this.lineCount;\n }\n parseLyricsWithChords(chordsLine, lyricsLine) {\n this.processCharacters(chordsLine, lyricsLine);\n if (!this.chordLyricsPair) throw new Error('Expected this.chordLyricsPair to be present');\n this.chordLyricsPair.lyrics += lyricsLine.substring(chordsLine.length);\n this.chordLyricsPair.chords = this.chordLyricsPair.chords.trim();\n if (this.chordLyricsPair.lyrics) this.chordLyricsPair.lyrics = this.chordLyricsPair.lyrics.trim();\n if (!lyricsLine.trim().length) {\n this.songLine = new (0, $a449f9ee1c7acbe4$export$2e2bcd8739ae039)();\n this.song.addLine(this.songLine);\n }\n }\n processCharacters(chordsLine, lyricsLine) {\n for(let c = 0, charCount = chordsLine.length; c < charCount; c += 1){\n const chr = chordsLine[c];\n const nextChar = chordsLine[c + 1];\n const isWhiteSpace = $f46090a0372cd33a$var$WHITE_SPACE.test(chr);\n this.addCharacter(chr, nextChar);\n if (!this.chordLyricsPair) throw new Error('Expected this.chordLyricsPair to be present');\n this.chordLyricsPair.lyrics += lyricsLine[c] || '';\n this.processingText = !isWhiteSpace;\n }\n }\n addCharacter(chr, nextChar) {\n const isWhiteSpace = $f46090a0372cd33a$var$WHITE_SPACE.test(chr);\n if (!isWhiteSpace) this.ensureChordLyricsPairInitialized();\n if (!isWhiteSpace || this.shouldAddCharacterToChords(nextChar)) {\n if (!this.chordLyricsPair) throw new Error('Expected this.chordLyricsPair to be present');\n this.chordLyricsPair.chords += chr;\n }\n }\n shouldAddCharacterToChords(nextChar) {\n return nextChar && $f46090a0372cd33a$var$WHITE_SPACE.test(nextChar) && this.preserveWhitespace;\n }\n ensureChordLyricsPairInitialized() {\n if (!this.processingText) {\n if (!this.songLine) throw new Error('Expected this.songLine to be present');\n this.chordLyricsPair = this.songLine.addChordLyricsPair();\n this.processingText = true;\n }\n }\n}\nvar $f46090a0372cd33a$export$2e2bcd8739ae039 = $f46090a0372cd33a$var$ChordSheetParser;\n\n\n\n\n\n\n\n\n\n\n\n\n\nclass $1fe4b3e27b735941$var$WhenClause {\n constructor(condition, callback){\n this.condition = !!condition;\n this.callback = callback;\n }\n evaluate(otherClauses) {\n if (this.condition) return this.callback();\n if (otherClauses.length > 0) {\n const [firstClause, ...rest] = otherClauses;\n return firstClause.evaluate(rest);\n }\n return '';\n }\n}\nvar $1fe4b3e27b735941$export$2e2bcd8739ae039 = $1fe4b3e27b735941$var$WhenClause;\n\n\nclass $9f25396128df55ac$var$When {\n constructor(condition, thenCallback){\n this.condition = false;\n this.clauses = [];\n this.add(condition, thenCallback);\n }\n then(thenCallback) {\n return this.add(this.condition, thenCallback);\n }\n elseWhen(condition, callback) {\n return this.add(condition, callback);\n }\n else(callback) {\n return this.add(true, callback);\n }\n add(condition, callback) {\n this.condition = !!condition;\n if (callback) this.clauses.push(new (0, $1fe4b3e27b735941$export$2e2bcd8739ae039)(condition, callback));\n return this;\n }\n toString() {\n const [firstClause, ...rest] = this.clauses;\n if (firstClause) return firstClause.evaluate(rest);\n throw new Error('Expected at least one .then() clause');\n }\n}\nvar $9f25396128df55ac$export$2e2bcd8739ae039 = $9f25396128df55ac$var$When;\n\n\n\nfunction $dfcb12f4c26c139d$export$17c9e635b932873b(item) {\n return item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039);\n}\nfunction $dfcb12f4c26c139d$export$3db5961874282581(line) {\n return line.items.some((item)=>item.isRenderable());\n}\nfunction $dfcb12f4c26c139d$export$3bf645f08efe3292(item) {\n return item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039);\n}\nfunction $dfcb12f4c26c139d$export$899158ea22bb4609(item) {\n return item instanceof (0, $34ab5875df061287$export$2e2bcd8739ae039);\n}\nfunction $dfcb12f4c26c139d$export$3ab01370f5e64ac8(item) {\n return item.name === 'comment';\n}\nfunction $dfcb12f4c26c139d$export$6ea1b0eb82ead3f(string) {\n return string.trim().replace(/(<\\/[a-z]+>)\\s+(<)/g, '$1$2').replace(/(>)\\s+(<\\/[a-z]+>)/g, '$1$2').replace(/(\\n)\\s+/g, '');\n}\nfunction $dfcb12f4c26c139d$export$e2953cc935d48476(string) {\n return string.replace(/\\n/g, '
');\n}\nfunction $dfcb12f4c26c139d$export$4c0287abd2ec956e(paragraph, configuration) {\n const delegate = configuration.delegates[paragraph.type] || (0, $5f5759837fa40df2$export$f152539e8297cacc);\n return delegate(paragraph.contents);\n}\nfunction $dfcb12f4c26c139d$export$79b2f7037acddd43(collection, callback) {\n return collection.map(callback).join('');\n}\nfunction $dfcb12f4c26c139d$export$a55877ca9db47377(condition, callback) {\n return new (0, $9f25396128df55ac$export$2e2bcd8739ae039)(condition, callback);\n}\nfunction $dfcb12f4c26c139d$export$b8d631d9200974fa(line) {\n return line.items.some((item)=>item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039) && !(0, $f52913d8767c6236$export$78d1711480f95c3e)(item.lyrics) || item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039) && item.isRenderable() || (0, $f52913d8767c6236$export$e3f63561d52b936d)(item));\n}\nfunction $dfcb12f4c26c139d$export$8a559c16cc3576(line) {\n const classes = [\n 'row'\n ];\n if (!$dfcb12f4c26c139d$export$3db5961874282581(line)) classes.push('empty-line');\n return classes.join(' ');\n}\nfunction $dfcb12f4c26c139d$export$dcd1550c9709312c(paragraph) {\n const classes = [\n 'paragraph'\n ];\n if (paragraph.type !== (0, $72b24102c7d826fd$export$c5a6fe907430212e) && paragraph.type !== (0, $72b24102c7d826fd$export$c53d0f541b41b88e)) classes.push(paragraph.type);\n return classes.join(' ');\n}\nfunction $dfcb12f4c26c139d$export$fef61f332f2c0afc(item, metadata, configuration) {\n return item.evaluate(metadata, configuration.metadataSeparator);\n}\nfunction $dfcb12f4c26c139d$export$ca030c9435779e4b(font) {\n const cssString = font.toCssString();\n if (cssString) return ` style=\"${cssString}\"`;\n return '';\n}\nvar $dfcb12f4c26c139d$export$2e2bcd8739ae039 = {\n isEvaluatable: $f52913d8767c6236$export$e3f63561d52b936d,\n isChordLyricsPair: $dfcb12f4c26c139d$export$17c9e635b932873b,\n lineHasContents: $dfcb12f4c26c139d$export$3db5961874282581,\n isTag: $dfcb12f4c26c139d$export$3bf645f08efe3292,\n isComment: $dfcb12f4c26c139d$export$3ab01370f5e64ac8,\n stripHTML: $dfcb12f4c26c139d$export$6ea1b0eb82ead3f,\n each: $dfcb12f4c26c139d$export$79b2f7037acddd43,\n when: $dfcb12f4c26c139d$export$a55877ca9db47377,\n hasTextContents: $dfcb12f4c26c139d$export$b8d631d9200974fa,\n lineClasses: $dfcb12f4c26c139d$export$8a559c16cc3576,\n paragraphClasses: $dfcb12f4c26c139d$export$dcd1550c9709312c,\n evaluate: $dfcb12f4c26c139d$export$fef61f332f2c0afc,\n fontStyleTag: $dfcb12f4c26c139d$export$ca030c9435779e4b,\n renderChord: $f5b90e5dc4871932$export$596ec52955da9472,\n hasChordContents: $f52913d8767c6236$export$d332d76d125f0cbe\n};\n\n\n\n\n/**\n * Formats a song into a plain text chord sheet\n */ class $07208092bd922ab3$var$ChordsOverWordsFormatter extends (0, $750c574c15888689$export$2e2bcd8739ae039) {\n /**\n * Formats a song into a plain text chord sheet\n * @param {Song} song The song to be formatted\n * @returns {string} the chord sheet\n */ format(song) {\n this.song = song;\n return [\n this.formatHeader(),\n this.formatParagraphs()\n ].join('');\n }\n formatHeader() {\n const metadata = Object.keys(this.song.metadata.metadata).map((key)=>`${key}: ${this.song.metadata[key]}`).join('\\n');\n return metadata ? `${metadata}\\n\\n` : '';\n }\n formatParagraphs() {\n const { bodyParagraphs: bodyParagraphs, bodyParagraphs: { length: count }, metadata: metadata } = this.song;\n const formattedParagraphs = bodyParagraphs.map((paragraph)=>this.formatParagraph(paragraph, metadata));\n const combined = formattedParagraphs.join('\\n\\n');\n if (formattedParagraphs[count - 1].length === 0) return combined.substring(0, combined.length - 1);\n return combined;\n }\n formatParagraph(paragraph, metadata) {\n if (paragraph.isLiteral()) return [\n paragraph.label,\n (0, $dfcb12f4c26c139d$export$4c0287abd2ec956e)(paragraph, this.configuration)\n ].filter((part)=>part).join('\\n');\n return paragraph.lines.filter((line)=>line.hasRenderableItems()).map((line)=>this.formatLine(line, metadata)).join('\\n');\n }\n formatLine(line, metadata) {\n const parts = [\n this.formatLineTop(line, metadata),\n this.formatLineBottom(line, metadata)\n ];\n return parts.filter((p)=>!(0, $f52913d8767c6236$export$78d1711480f95c3e)(p)).map((part)=>(part || '').trimRight()).join('\\n');\n }\n formatLineTop(line, metadata) {\n if ((0, $f52913d8767c6236$export$bf7e789722aab9d6)(line)) return this.formatLineWithFormatter(line, this.formatItemTop, metadata);\n return null;\n }\n chordLyricsPairLength(chordLyricsPair, line) {\n const content = chordLyricsPair.annotation || this.renderChord(chordLyricsPair, line);\n const { lyrics: lyrics } = chordLyricsPair;\n const contentLength = (content || '').length;\n const lyricsLength = (lyrics || '').length;\n if (contentLength >= lyricsLength) return contentLength + 1;\n return Math.max(contentLength, lyricsLength);\n }\n formatItemTop(item, _metadata, line) {\n if (item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039) && item.isRenderable()) return item.label;\n if (item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039)) {\n const content = item.annotation || this.renderChord(item, line);\n return (0, $f52913d8767c6236$export$bc3bea8325045070)(content, this.chordLyricsPairLength(item, line));\n }\n return '';\n }\n renderChord(item, line) {\n return (0, $f5b90e5dc4871932$export$596ec52955da9472)(item.chords, line, this.song, {\n renderKey: this.configuration.key,\n normalizeChords: this.configuration.normalizeChords,\n decapo: this.configuration.decapo\n });\n }\n formatLineBottom(line, metadata) {\n if ((0, $dfcb12f4c26c139d$export$b8d631d9200974fa)(line)) return this.formatLineWithFormatter(line, this.formatItemBottom, metadata);\n return null;\n }\n formatLineWithFormatter(line, formatter, metadata) {\n return line.items.map((item)=>formatter.call(this, item, metadata, line)).join('');\n }\n formatItemBottom(item, metadata, line) {\n if (typeof item === 'string') return item;\n if (item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039) && item.isRenderable()) return item.label;\n if (item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039)) return this.formatChordLyricsPair(item, line);\n if ('evaluate' in item) return this.formatEvaluatable(item, metadata);\n return '';\n }\n formatEvaluatable(item, metadata) {\n return item.evaluate(metadata, this.configuration.metadataSeparator);\n }\n formatChordLyricsPair(item, line) {\n return (0, $f52913d8767c6236$export$bc3bea8325045070)(item.lyrics || '', this.chordLyricsPairLength(item, line));\n }\n constructor(...args){\n super(...args), this.song = new (0, $962eb86a322c5cfb$export$2e2bcd8739ae039)();\n }\n}\nvar $07208092bd922ab3$export$2e2bcd8739ae039 = $07208092bd922ab3$var$ChordsOverWordsFormatter;\n\n\nfunction $cf5895add2d0ec4a$export$9f6ee93f4e2fb3d2(string) {\n const result = /(\\s+)(\\S+)/.exec(string);\n const secondWordPosition = result ? result.index + result[1].length : null;\n if (secondWordPosition && secondWordPosition !== -1) return [\n string.substring(0, secondWordPosition).trim(),\n string.substring(secondWordPosition)\n ];\n return [\n /.+\\s+$/.test(string) ? `${string.trim()} ` : string,\n null\n ];\n}\n\n\nfunction $698d1b7df9bab6b4$var$combineChordSheetLines(newLine, lines, trailingLine) {\n const hasEmptyLine = newLine && newLine.length > 0;\n const emptyLines = hasEmptyLine ? [\n {\n type: 'line',\n items: []\n }\n ] : [];\n return [\n ...emptyLines,\n ...lines,\n trailingLine\n ].filter((x)=>x !== null);\n}\nfunction $698d1b7df9bab6b4$var$applySoftLineBreaks(line) {\n return line.split(/\\\\\\s+/).flatMap((lyric, index)=>[\n index === 0 ? null : {\n type: 'softLineBreak'\n },\n lyric.length === 0 ? null : {\n type: 'chordLyricsPair',\n chords: '',\n lyrics: lyric\n }\n ]);\n}\nfunction $698d1b7df9bab6b4$var$chordProperties(chord) {\n // Disable no-unused-vars until destructuredObjectIgnorePattern is available\n const { type: _type, ...properties } = chord;\n return properties;\n}\nfunction $698d1b7df9bab6b4$var$constructChordLyricsPairs(chords, lyrics, chopFirstWord) {\n return chords.map((chord, i)=>{\n const nextChord = chords[i + 1];\n const start = chord.column - 1;\n const end = nextChord ? nextChord.column - 1 : lyrics.length;\n const pairLyrics = lyrics.substring(start, end);\n const [firstWord, rest] = chopFirstWord ? (0, $cf5895add2d0ec4a$export$9f6ee93f4e2fb3d2)(pairLyrics) : [\n pairLyrics,\n null\n ];\n const chordData = chord.type === 'chord' ? {\n chord: $698d1b7df9bab6b4$var$chordProperties(chord)\n } : {\n chords: chord.value\n };\n if (rest) return [\n {\n ...chordData,\n type: 'chordLyricsPair',\n lyrics: `${firstWord} `\n },\n ...$698d1b7df9bab6b4$var$applySoftLineBreaks(rest)\n ].filter((x)=>x !== null);\n return {\n ...chordData,\n type: 'chordLyricsPair',\n lyrics: firstWord\n };\n }).flat();\n}\nfunction $698d1b7df9bab6b4$var$pairChordsWithLyrics(chordsLine, lyricsLine, chopFirstWord) {\n const { content: lyrics } = lyricsLine;\n const chords = chordsLine.items;\n const chordLyricsPairs = $698d1b7df9bab6b4$var$constructChordLyricsPairs(chords, lyrics, chopFirstWord);\n const firstChord = chords[0];\n if (firstChord && firstChord.column > 1) {\n const firstChordPosition = firstChord.column;\n if (firstChordPosition > 0) chordLyricsPairs.unshift({\n type: 'chordLyricsPair',\n chords: '',\n lyrics: lyrics.substring(0, firstChordPosition - 1)\n });\n }\n return {\n type: 'line',\n items: chordLyricsPairs\n };\n}\nfunction $698d1b7df9bab6b4$var$lyricsStringToLine(lyrics) {\n return {\n type: 'line',\n items: [\n {\n type: 'chordLyricsPair',\n chords: '',\n lyrics: lyrics\n }\n ]\n };\n}\nfunction $698d1b7df9bab6b4$var$chordsLineItemToChordLyricsPair(item) {\n switch(item.type){\n case 'chord':\n return {\n type: 'chordLyricsPair',\n chord: item,\n chords: '',\n lyrics: null\n };\n case 'symbol':\n return {\n type: 'chordLyricsPair',\n chords: item.value,\n lyrics: null\n };\n default:\n throw new Error(`Unexpected chordsLine item ${item}`);\n }\n}\nfunction $698d1b7df9bab6b4$var$chordsToLine(chordsLine) {\n return {\n type: 'line',\n items: chordsLine.items.map((item)=>$698d1b7df9bab6b4$var$chordsLineItemToChordLyricsPair(item))\n };\n}\nfunction $698d1b7df9bab6b4$var$lyricsToLine(lyricsLine) {\n const { content: content } = lyricsLine;\n if (content && content.length > 0) return $698d1b7df9bab6b4$var$lyricsStringToLine(content);\n return {\n type: 'line',\n items: []\n };\n}\nfunction $698d1b7df9bab6b4$var$buildLine(chordSheetLine, nextLine, chopFirstWord) {\n const { type: type } = chordSheetLine;\n if (type === 'lyricsLine') return [\n $698d1b7df9bab6b4$var$lyricsToLine(chordSheetLine),\n false\n ];\n if (type === 'chordsLine') {\n if (nextLine && nextLine.type === 'lyricsLine' && nextLine.content && nextLine.content.length > 0) return [\n $698d1b7df9bab6b4$var$pairChordsWithLyrics(chordSheetLine, nextLine, chopFirstWord),\n true\n ];\n return [\n $698d1b7df9bab6b4$var$chordsToLine(chordSheetLine),\n false\n ];\n }\n return [\n chordSheetLine,\n false\n ];\n}\nfunction $698d1b7df9bab6b4$var$arrangeChordSheetLines(chordSheetLines, chopFirstWord) {\n const arrangedLines = [];\n let lineIndex = 0;\n const lastLineIndex = chordSheetLines.length - 1;\n while(lineIndex <= lastLineIndex){\n const chordSheetLine = chordSheetLines[lineIndex];\n const nextLine = chordSheetLines[lineIndex + 1];\n const [arrangedLine, skipNextLine] = $698d1b7df9bab6b4$var$buildLine(chordSheetLine, nextLine, chopFirstWord);\n arrangedLines.push(arrangedLine);\n lineIndex += skipNextLine ? 2 : 1;\n }\n return arrangedLines;\n}\nfunction $698d1b7df9bab6b4$export$f0dcc8f253e2c535(newLine, lines, trailingLine, chopFirstWord) {\n const allLines = $698d1b7df9bab6b4$var$combineChordSheetLines(newLine, lines, trailingLine);\n return $698d1b7df9bab6b4$var$arrangeChordSheetLines(allLines, chopFirstWord);\n}\n\n\n// Generated by peggy v. 4.2.0 (ts-pegjs plugin v. 3.1.0 )\n//\n// https://peggyjs.org/ https://github.com/metadevpro/ts-pegjs\n\"use strict\";\nfunction $f22c8d9a47c38bea$var$peg$padEnd(str, targetLength, padString) {\n padString = padString || ' ';\n if (str.length > targetLength) return str;\n targetLength -= str.length;\n padString += padString.repeat(targetLength);\n return str + padString.slice(0, targetLength);\n}\nclass $f22c8d9a47c38bea$export$628c65c376ead699 extends Error {\n static buildMessage(expected, found) {\n function hex(ch) {\n return ch.charCodeAt(0).toString(16).toUpperCase();\n }\n function literalEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, \"\\\\\\\"\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, (ch)=>\"\\\\x0\" + hex(ch)).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, (ch)=>\"\\\\x\" + hex(ch));\n }\n function classEscape(s) {\n return s.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\").replace(/\\^/g, \"\\\\^\").replace(/-/g, \"\\\\-\").replace(/\\0/g, \"\\\\0\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x0F]/g, (ch)=>\"\\\\x0\" + hex(ch)).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g, (ch)=>\"\\\\x\" + hex(ch));\n }\n function describeExpectation(expectation) {\n switch(expectation.type){\n case \"literal\":\n return \"\\\"\" + literalEscape(expectation.text) + \"\\\"\";\n case \"class\":\n const escapedParts = expectation.parts.map((part)=>{\n return Array.isArray(part) ? classEscape(part[0]) + \"-\" + classEscape(part[1]) : classEscape(part);\n });\n return \"[\" + (expectation.inverted ? \"^\" : \"\") + escapedParts + \"]\";\n case \"any\":\n return \"any character\";\n case \"end\":\n return \"end of input\";\n case \"other\":\n return expectation.description;\n }\n }\n function describeExpected(expected1) {\n const descriptions = expected1.map(describeExpectation);\n let i;\n let j;\n descriptions.sort();\n if (descriptions.length > 0) {\n for(i = 1, j = 1; i < descriptions.length; i++)if (descriptions[i - 1] !== descriptions[i]) {\n descriptions[j] = descriptions[i];\n j++;\n }\n descriptions.length = j;\n }\n switch(descriptions.length){\n case 1:\n return descriptions[0];\n case 2:\n return descriptions[0] + \" or \" + descriptions[1];\n default:\n return descriptions.slice(0, -1).join(\", \") + \", or \" + descriptions[descriptions.length - 1];\n }\n }\n function describeFound(found1) {\n return found1 ? \"\\\"\" + literalEscape(found1) + \"\\\"\" : \"end of input\";\n }\n return \"Expected \" + describeExpected(expected) + \" but \" + describeFound(found) + \" found.\";\n }\n constructor(message, expected, found, location){\n super();\n this.message = message;\n this.expected = expected;\n this.found = found;\n this.location = location;\n this.name = \"PeggySyntaxError\";\n if (typeof Object.setPrototypeOf === \"function\") Object.setPrototypeOf(this, $f22c8d9a47c38bea$export$628c65c376ead699.prototype);\n else this.__proto__ = $f22c8d9a47c38bea$export$628c65c376ead699.prototype;\n if (typeof Error.captureStackTrace === \"function\") Error.captureStackTrace(this, $f22c8d9a47c38bea$export$628c65c376ead699);\n }\n format(sources) {\n let str = 'Error: ' + this.message;\n if (this.location) {\n let src = null;\n let k;\n for(k = 0; k < sources.length; k++)if (sources[k].grammarSource === this.location.source) {\n src = sources[k].text.split(/\\r\\n|\\n|\\r/g);\n break;\n }\n let s = this.location.start;\n let loc = this.location.source + ':' + s.line + ':' + s.column;\n if (src) {\n let e = this.location.end;\n let filler = $f22c8d9a47c38bea$var$peg$padEnd('', s.line.toString().length, ' ');\n let line = src[s.line - 1];\n let last = s.line === e.line ? e.column : line.length + 1;\n str += '\\n --> ' + loc + '\\n' + filler + ' |\\n' + s.line + ' | ' + line + '\\n' + filler + ' | ' + $f22c8d9a47c38bea$var$peg$padEnd('', s.column - 1, ' ') + $f22c8d9a47c38bea$var$peg$padEnd('', last - s.column, '^');\n } else str += '\\n at ' + loc;\n }\n return str;\n }\n}\nfunction $f22c8d9a47c38bea$var$peg$parse(input, options) {\n options = options !== undefined ? options : {};\n const peg$FAILED = {};\n const peg$source = options.grammarSource;\n const peg$startRuleFunctions = {\n ChordSheet: peg$parseChordSheet\n };\n let peg$startRuleFunction = peg$parseChordSheet;\n const peg$c0 = function(metadataLines, lines) {\n return {\n type: \"chordSheet\",\n lines: [\n ...metadataLines,\n ...lines\n ]\n };\n };\n const peg$c1 = function(newLine, lines, trailingLine) {\n return $698d1b7df9bab6b4$export$f0dcc8f253e2c535(newLine, lines, trailingLine, options.chopFirstWord !== false);\n };\n const peg$c2 = function(item) {\n return item;\n };\n const peg$c3 = function(line) {\n return line;\n };\n const peg$c4 = function(chordsLine) {\n return chordsLine;\n };\n const peg$c5 = function(items) {\n return {\n type: \"chordsLine\",\n items: items\n };\n };\n const peg$c6 = function(symbol) {\n return symbol;\n };\n const peg$c7 = /^[\\-\\/x|]/;\n const peg$c8 = peg$classExpectation([\n \"-\",\n \"/\",\n \"x\",\n \"|\"\n ], false, false);\n const peg$c9 = function(symbol) {\n return {\n type: \"symbol\",\n value: symbol,\n column: location().start.column\n };\n };\n const peg$c10 = function(lyrics) {\n return {\n type: \"lyricsLine\",\n content: lyrics\n };\n };\n const peg$c11 = function(chord) {\n return chord;\n };\n const peg$c12 = function(line) {\n return {\n type: \"line\",\n items: [\n {\n type: \"tag\",\n name: \"comment\",\n value: line\n }\n ]\n };\n };\n const peg$c13 = \"verse\";\n const peg$c14 = peg$literalExpectation(\"verse\", true);\n const peg$c15 = \"chorus\";\n const peg$c16 = peg$literalExpectation(\"chorus\", true);\n const peg$c17 = \"bridge\";\n const peg$c18 = peg$literalExpectation(\"bridge\", true);\n const peg$c19 = \"tag\";\n const peg$c20 = peg$literalExpectation(\"tag\", true);\n const peg$c21 = \"interlude\";\n const peg$c22 = peg$literalExpectation(\"interlude\", true);\n const peg$c23 = \"instrumental\";\n const peg$c24 = peg$literalExpectation(\"instrumental\", true);\n const peg$c25 = \"intro\";\n const peg$c26 = peg$literalExpectation(\"intro\", true);\n const peg$c27 = /^[^\\n\\r]/;\n const peg$c28 = peg$classExpectation([\n \"\\n\",\n \"\\r\"\n ], true, false);\n const peg$c29 = function(pairs, trailingPair) {\n return [\n ...pairs,\n trailingPair\n ].filter((x)=>x).map(([key, value])=>({\n type: \"line\",\n items: [\n {\n type: \"tag\",\n name: key,\n value: value\n }\n ]\n }));\n };\n const peg$c30 = function(key, value) {\n return {\n type: \"line\",\n items: [\n {\n type: \"tag\",\n name: key,\n value: value\n }\n ]\n };\n };\n const peg$c31 = function(pair) {\n return pair;\n };\n const peg$c32 = \"{\";\n const peg$c33 = peg$literalExpectation(\"{\", false);\n const peg$c34 = \"}\";\n const peg$c35 = peg$literalExpectation(\"}\", false);\n const peg$c36 = function(pair) {\n return pair;\n };\n const peg$c37 = function(key, value) {\n return [\n key,\n value\n ];\n };\n const peg$c38 = \":\";\n const peg$c39 = peg$literalExpectation(\":\", false);\n const peg$c40 = /^[a-zA-Z0-9\\-_]/;\n const peg$c41 = peg$classExpectation([\n [\n \"a\",\n \"z\"\n ],\n [\n \"A\",\n \"Z\"\n ],\n [\n \"0\",\n \"9\"\n ],\n \"-\",\n \"_\"\n ], false, false);\n const peg$c42 = /^[^\\n\\r}]/;\n const peg$c43 = peg$classExpectation([\n \"\\n\",\n \"\\r\",\n \"}\"\n ], true, false);\n const peg$c44 = \"---\";\n const peg$c45 = peg$literalExpectation(\"---\", false);\n const peg$c46 = peg$otherExpectation(\"whitespace\");\n const peg$c47 = /^[ \\t]/;\n const peg$c48 = peg$classExpectation([\n \" \",\n \"\\t\"\n ], false, false);\n const peg$c49 = function(chord) {\n return {\n type: \"chord\",\n ...chord,\n column: location().start.column\n };\n };\n const peg$c50 = /^[#b]/;\n const peg$c51 = peg$classExpectation([\n \"#\",\n \"b\"\n ], false, false);\n const peg$c52 = function(root, modifier, suffix, bass) {\n return {\n base: root,\n modifier: modifier,\n suffix: suffix,\n ...bass,\n chordType: \"symbol\"\n };\n };\n const peg$c53 = function(bass) {\n return {\n base: null,\n modifier: null,\n suffix: null,\n ...bass,\n chordType: \"symbol\"\n };\n };\n const peg$c54 = /^[A-Ga-g]/;\n const peg$c55 = peg$classExpectation([\n [\n \"A\",\n \"G\"\n ],\n [\n \"a\",\n \"g\"\n ]\n ], false, false);\n const peg$c56 = \"/\";\n const peg$c57 = peg$literalExpectation(\"/\", false);\n const peg$c58 = function(root, modifier) {\n return {\n bassBase: root,\n bassModifier: modifier\n };\n };\n const peg$c59 = function(root, modifier, suffix, bass) {\n return {\n base: root,\n modifier: modifier,\n suffix: suffix,\n ...bass,\n chordType: \"solfege\"\n };\n };\n const peg$c60 = function(bass) {\n return {\n base: null,\n modifier: null,\n suffix: null,\n ...bass,\n chordType: \"solfege\"\n };\n };\n const peg$c61 = \"do\";\n const peg$c62 = peg$literalExpectation(\"Do\", true);\n const peg$c63 = \"re\";\n const peg$c64 = peg$literalExpectation(\"Re\", true);\n const peg$c65 = \"mi\";\n const peg$c66 = peg$literalExpectation(\"Mi\", true);\n const peg$c67 = \"fa\";\n const peg$c68 = peg$literalExpectation(\"Fa\", true);\n const peg$c69 = \"sol\";\n const peg$c70 = peg$literalExpectation(\"Sol\", true);\n const peg$c71 = \"la\";\n const peg$c72 = peg$literalExpectation(\"La\", true);\n const peg$c73 = \"si\";\n const peg$c74 = peg$literalExpectation(\"Si\", true);\n const peg$c75 = function(modifier, root, suffix, bass) {\n return {\n base: root,\n modifier: modifier,\n suffix: suffix,\n ...bass,\n chordType: \"numeral\"\n };\n };\n const peg$c76 = function(bass) {\n return {\n base: null,\n modifier: null,\n suffix: null,\n ...bass,\n chordType: \"numeral\"\n };\n };\n const peg$c77 = \"iii\";\n const peg$c78 = peg$literalExpectation(\"III\", true);\n const peg$c79 = \"vii\";\n const peg$c80 = peg$literalExpectation(\"VII\", true);\n const peg$c81 = \"ii\";\n const peg$c82 = peg$literalExpectation(\"II\", true);\n const peg$c83 = \"iv\";\n const peg$c84 = peg$literalExpectation(\"IV\", true);\n const peg$c85 = \"vi\";\n const peg$c86 = peg$literalExpectation(\"VI\", true);\n const peg$c87 = /^[IV]/i;\n const peg$c88 = peg$classExpectation([\n \"I\",\n \"V\"\n ], false, true);\n const peg$c89 = function(modifier, root) {\n return {\n bassBase: root,\n bassModifier: modifier\n };\n };\n const peg$c90 = function(modifier, root, suffix, bass) {\n return {\n base: root,\n modifier: modifier,\n suffix: suffix,\n ...bass,\n chordType: \"numeric\"\n };\n };\n const peg$c91 = function(bass) {\n return {\n base: null,\n modifier: null,\n suffix: null,\n ...bass,\n chordType: \"numeric\"\n };\n };\n const peg$c92 = /^[1-7]/;\n const peg$c93 = peg$classExpectation([\n [\n \"1\",\n \"7\"\n ]\n ], false, false);\n const peg$c94 = \"2(#4)(#42)(2#4)\";\n const peg$c95 = peg$literalExpectation(\"2(#4)(#42)(2#4)\", false);\n const peg$c96 = \"maj13(+11+5)\";\n const peg$c97 = peg$literalExpectation(\"maj13(+11+5)\", false);\n const peg$c98 = \"maj13(#11#5)\";\n const peg$c99 = peg$literalExpectation(\"maj13(#11#5)\", false);\n const peg$c100 = \"ma13(#11#5)\";\n const peg$c101 = peg$literalExpectation(\"ma13(#11#5)\", false);\n const peg$c102 = \"ma13(+11+5)\";\n const peg$c103 = peg$literalExpectation(\"ma13(+11+5)\", false);\n const peg$c104 = \"maj13(+9+5)\";\n const peg$c105 = peg$literalExpectation(\"maj13(+9+5)\", false);\n const peg$c106 = \"maj13(#9#5)\";\n const peg$c107 = peg$literalExpectation(\"maj13(#9#5)\", false);\n const peg$c108 = \"maj13(-9+5)\";\n const peg$c109 = peg$literalExpectation(\"maj13(-9+5)\", false);\n const peg$c110 = \"maj13(b9#5)\";\n const peg$c111 = peg$literalExpectation(\"maj13(b9#5)\", false);\n const peg$c112 = \"maj9(+11+5)\";\n const peg$c113 = peg$literalExpectation(\"maj9(+11+5)\", false);\n const peg$c114 = \"maj9(#11#5)\";\n const peg$c115 = peg$literalExpectation(\"maj9(#11#5)\", false);\n const peg$c116 = \"maj9(-13+5)\";\n const peg$c117 = peg$literalExpectation(\"maj9(-13+5)\", false);\n const peg$c118 = \"maj9(b13#5)\";\n const peg$c119 = peg$literalExpectation(\"maj9(b13#5)\", false);\n const peg$c120 = \"m11(#9b13)\";\n const peg$c121 = peg$literalExpectation(\"m11(#9b13)\", false);\n const peg$c122 = \"m11(+9-13)\";\n const peg$c123 = peg$literalExpectation(\"m11(+9-13)\", false);\n const peg$c124 = \"-11(#9b13)\";\n const peg$c125 = peg$literalExpectation(\"-11(#9b13)\", false);\n const peg$c126 = \"-11(+9-13)\";\n const peg$c127 = peg$literalExpectation(\"-11(+9-13)\", false);\n const peg$c128 = \"m11(b13#5)\";\n const peg$c129 = peg$literalExpectation(\"m11(b13#5)\", false);\n const peg$c130 = \"m11(#5b13)\";\n const peg$c131 = peg$literalExpectation(\"m11(#5b13)\", false);\n const peg$c132 = \"m11(+5-13)\";\n const peg$c133 = peg$literalExpectation(\"m11(+5-13)\", false);\n const peg$c134 = \"-11(#5b13)\";\n const peg$c135 = peg$literalExpectation(\"-11(#5b13)\", false);\n const peg$c136 = \"-11(+5-13)\";\n const peg$c137 = peg$literalExpectation(\"-11(+5-13)\", false);\n const peg$c138 = \"m11(b5b13)\";\n const peg$c139 = peg$literalExpectation(\"m11(b5b13)\", false);\n const peg$c140 = \"m11(-5-13)\";\n const peg$c141 = peg$literalExpectation(\"m11(-5-13)\", false);\n const peg$c142 = \"-11(b5b13)\";\n const peg$c143 = peg$literalExpectation(\"-11(b5b13)\", false);\n const peg$c144 = \"-11(-5-13)\";\n const peg$c145 = peg$literalExpectation(\"-11(-5-13)\", false);\n const peg$c146 = \"m11(b9b13)\";\n const peg$c147 = peg$literalExpectation(\"m11(b9b13)\", false);\n const peg$c148 = \"m11(-9-13)\";\n const peg$c149 = peg$literalExpectation(\"m11(-9-13)\", false);\n const peg$c150 = \"-11(b9b13)\";\n const peg$c151 = peg$literalExpectation(\"-11(b9b13)\", false);\n const peg$c152 = \"-11(-9-13)\";\n const peg$c153 = peg$literalExpectation(\"-11(-9-13)\", false);\n const peg$c154 = \"maj11(-13)\";\n const peg$c155 = peg$literalExpectation(\"maj11(-13)\", false);\n const peg$c156 = \"maj11(b13)\";\n const peg$c157 = peg$literalExpectation(\"maj11(b13)\", false);\n const peg$c158 = \"maj13(+11)\";\n const peg$c159 = peg$literalExpectation(\"maj13(+11)\", false);\n const peg$c160 = \"maj13(#11)\";\n const peg$c161 = peg$literalExpectation(\"maj13(#11)\", false);\n const peg$c162 = \"maj13#11#5\";\n const peg$c163 = peg$literalExpectation(\"maj13#11#5\", false);\n const peg$c164 = \"maj13+11+5\";\n const peg$c165 = peg$literalExpectation(\"maj13+11+5\", false);\n const peg$c166 = \"+13(#11#5)\";\n const peg$c167 = peg$literalExpectation(\"+13(#11#5)\", false);\n const peg$c168 = \"+13(+11+5)\";\n const peg$c169 = peg$literalExpectation(\"+13(+11+5)\", false);\n const peg$c170 = \"ma13(#9#5)\";\n const peg$c171 = peg$literalExpectation(\"ma13(#9#5)\", false);\n const peg$c172 = \"ma13(+9+5)\";\n const peg$c173 = peg$literalExpectation(\"ma13(+9+5)\", false);\n const peg$c174 = \"ma13(b9#5)\";\n const peg$c175 = peg$literalExpectation(\"ma13(b9#5)\", false);\n const peg$c176 = \"ma13(-9+5)\";\n const peg$c177 = peg$literalExpectation(\"ma13(-9+5)\", false);\n const peg$c178 = \"(triangle)\";\n const peg$c179 = peg$literalExpectation(\"(triangle)\", false);\n const peg$c180 = \"ma9(#11#5)\";\n const peg$c181 = peg$literalExpectation(\"ma9(#11#5)\", false);\n const peg$c182 = \"ma9(+11+5)\";\n const peg$c183 = peg$literalExpectation(\"ma9(+11+5)\", false);\n const peg$c184 = \"ma9(b13#5)\";\n const peg$c185 = peg$literalExpectation(\"ma9(b13#5)\", false);\n const peg$c186 = \"ma9(-13+5)\";\n const peg$c187 = peg$literalExpectation(\"ma9(-13+5)\", false);\n const peg$c188 = \"add9(no3)\";\n const peg$c189 = peg$literalExpectation(\"add9(no3)\", false);\n const peg$c190 = \"min(maj7)\";\n const peg$c191 = peg$literalExpectation(\"min(maj7)\", false);\n const peg$c192 = \"min(maj9)\";\n const peg$c193 = peg$literalExpectation(\"min(maj9)\", false);\n const peg$c194 = \"m11(#9#5)\";\n const peg$c195 = peg$literalExpectation(\"m11(#9#5)\", false);\n const peg$c196 = \"m11(#5#9)\";\n const peg$c197 = peg$literalExpectation(\"m11(#5#9)\", false);\n const peg$c198 = \"m11(+5+9)\";\n const peg$c199 = peg$literalExpectation(\"m11(+5+9)\", false);\n const peg$c200 = \"-11(#5#9)\";\n const peg$c201 = peg$literalExpectation(\"-11(#5#9)\", false);\n const peg$c202 = \"-11(+5+9)\";\n const peg$c203 = peg$literalExpectation(\"-11(+5+9)\", false);\n const peg$c204 = \"m11(b5#9)\";\n const peg$c205 = peg$literalExpectation(\"m11(b5#9)\", false);\n const peg$c206 = \"m11(-5+9)\";\n const peg$c207 = peg$literalExpectation(\"m11(-5+9)\", false);\n const peg$c208 = \"-11(b5#9)\";\n const peg$c209 = peg$literalExpectation(\"-11(b5#9)\", false);\n const peg$c210 = \"-11(-5+9)\";\n const peg$c211 = peg$literalExpectation(\"-11(-5+9)\", false);\n const peg$c212 = \"m11(b5b9)\";\n const peg$c213 = peg$literalExpectation(\"m11(b5b9)\", false);\n const peg$c214 = \"m11(-5-9)\";\n const peg$c215 = peg$literalExpectation(\"m11(-5-9)\", false);\n const peg$c216 = \"-11(b5b9)\";\n const peg$c217 = peg$literalExpectation(\"-11(b5b9)\", false);\n const peg$c218 = \"-11(-5-9)\";\n const peg$c219 = peg$literalExpectation(\"-11(-5-9)\", false);\n const peg$c220 = \"m11(b9#5)\";\n const peg$c221 = peg$literalExpectation(\"m11(b9#5)\", false);\n const peg$c222 = \"m11(#5b9)\";\n const peg$c223 = peg$literalExpectation(\"m11(#5b9)\", false);\n const peg$c224 = \"m11(+5-9)\";\n const peg$c225 = peg$literalExpectation(\"m11(+5-9)\", false);\n const peg$c226 = \"-11(#5b9)\";\n const peg$c227 = peg$literalExpectation(\"-11(#5b9)\", false);\n const peg$c228 = \"-11(+5-9)\";\n const peg$c229 = peg$literalExpectation(\"-11(+5-9)\", false);\n const peg$c230 = \"m7(add11)\";\n const peg$c231 = peg$literalExpectation(\"m7(add11)\", false);\n const peg$c232 = \"min7(no3)\";\n const peg$c233 = peg$literalExpectation(\"min7(no3)\", false);\n const peg$c234 = \"maj11(+5)\";\n const peg$c235 = peg$literalExpectation(\"maj11(+5)\", false);\n const peg$c236 = \"maj11(#5)\";\n const peg$c237 = peg$literalExpectation(\"maj11(#5)\", false);\n const peg$c238 = \"maj11(+9)\";\n const peg$c239 = peg$literalExpectation(\"maj11(+9)\", false);\n const peg$c240 = \"maj11(#9)\";\n const peg$c241 = peg$literalExpectation(\"maj11(#9)\", false);\n const peg$c242 = \"ma11(b13)\";\n const peg$c243 = peg$literalExpectation(\"ma11(b13)\", false);\n const peg$c244 = \"ma11(-13)\";\n const peg$c245 = peg$literalExpectation(\"ma11(-13)\", false);\n const peg$c246 = \"maj11(-5)\";\n const peg$c247 = peg$literalExpectation(\"maj11(-5)\", false);\n const peg$c248 = \"maj11(b5)\";\n const peg$c249 = peg$literalExpectation(\"maj11(b5)\", false);\n const peg$c250 = \"maj11(-9)\";\n const peg$c251 = peg$literalExpectation(\"maj11(-9)\", false);\n const peg$c252 = \"maj11(b9)\";\n const peg$c253 = peg$literalExpectation(\"maj11(b9)\", false);\n const peg$c254 = \"ma13(#11)\";\n const peg$c255 = peg$literalExpectation(\"ma13(#11)\", false);\n const peg$c256 = \"ma13(+11)\";\n const peg$c257 = peg$literalExpectation(\"ma13(+11)\", false);\n const peg$c258 = \"ma13+11+5\";\n const peg$c259 = peg$literalExpectation(\"ma13+11+5\", false);\n const peg$c260 = \"maj13(+5)\";\n const peg$c261 = peg$literalExpectation(\"maj13(+5)\", false);\n const peg$c262 = \"maj13(#5)\";\n const peg$c263 = peg$literalExpectation(\"maj13(#5)\", false);\n const peg$c264 = \"maj13(+9)\";\n const peg$c265 = peg$literalExpectation(\"maj13(+9)\", false);\n const peg$c266 = \"maj13(#9)\";\n const peg$c267 = peg$literalExpectation(\"maj13(#9)\", false);\n const peg$c268 = \"maj13#9#5\";\n const peg$c269 = peg$literalExpectation(\"maj13#9#5\", false);\n const peg$c270 = \"maj13+9+5\";\n const peg$c271 = peg$literalExpectation(\"maj13+9+5\", false);\n const peg$c272 = \"+13(#9#5)\";\n const peg$c273 = peg$literalExpectation(\"+13(#9#5)\", false);\n const peg$c274 = \"M13(+9+5)\";\n const peg$c275 = peg$literalExpectation(\"M13(+9+5)\", false);\n const peg$c276 = \"maj13(-5)\";\n const peg$c277 = peg$literalExpectation(\"maj13(-5)\", false);\n const peg$c278 = \"maj13(b5)\";\n const peg$c279 = peg$literalExpectation(\"maj13(b5)\", false);\n const peg$c280 = \"maj13(-9)\";\n const peg$c281 = peg$literalExpectation(\"maj13(-9)\", false);\n const peg$c282 = \"maj13(b9)\";\n const peg$c283 = peg$literalExpectation(\"maj13(b9)\", false);\n const peg$c284 = \"maj13b9#5\";\n const peg$c285 = peg$literalExpectation(\"maj13b9#5\", false);\n const peg$c286 = \"maj13-9+5\";\n const peg$c287 = peg$literalExpectation(\"maj13-9+5\", false);\n const peg$c288 = \"+13(b9#5)\";\n const peg$c289 = peg$literalExpectation(\"+13(b9#5)\", false);\n const peg$c290 = \"+13(-9+5)\";\n const peg$c291 = peg$literalExpectation(\"+13(-9+5)\", false);\n const peg$c292 = \"maj7(+11)\";\n const peg$c293 = peg$literalExpectation(\"maj7(+11)\", false);\n const peg$c294 = \"maj7(#11)\";\n const peg$c295 = peg$literalExpectation(\"maj7(#11)\", false);\n const peg$c296 = \"aug(maj7)\";\n const peg$c297 = peg$literalExpectation(\"aug(maj7)\", false);\n const peg$c298 = \"maj7(-13)\";\n const peg$c299 = peg$literalExpectation(\"maj7(-13)\", false);\n const peg$c300 = \"maj7(b13)\";\n const peg$c301 = peg$literalExpectation(\"maj7(b13)\", false);\n const peg$c302 = \"maj9(+11)\";\n const peg$c303 = peg$literalExpectation(\"maj9(+11)\", false);\n const peg$c304 = \"maj9(#11)\";\n const peg$c305 = peg$literalExpectation(\"maj9(#11)\", false);\n const peg$c306 = \"maj9#11#5\";\n const peg$c307 = peg$literalExpectation(\"maj9#11#5\", false);\n const peg$c308 = \"maj9+11+5\";\n const peg$c309 = peg$literalExpectation(\"maj9+11+5\", false);\n const peg$c310 = \"+9(#11#5)\";\n const peg$c311 = peg$literalExpectation(\"+9(#11#5)\", false);\n const peg$c312 = \"+9(+11+5)\";\n const peg$c313 = peg$literalExpectation(\"+9(+11+5)\", false);\n const peg$c314 = \"maj9(-13)\";\n const peg$c315 = peg$literalExpectation(\"maj9(-13)\", false);\n const peg$c316 = \"maj9(b13)\";\n const peg$c317 = peg$literalExpectation(\"maj9(b13)\", false);\n const peg$c318 = \"maj9b13#5\";\n const peg$c319 = peg$literalExpectation(\"maj9b13#5\", false);\n const peg$c320 = \"maj9-13+5\";\n const peg$c321 = peg$literalExpectation(\"maj9-13+5\", false);\n const peg$c322 = \"+9(b13#5)\";\n const peg$c323 = peg$literalExpectation(\"+9(b13#5)\", false);\n const peg$c324 = \"+9(-13+5)\";\n const peg$c325 = peg$literalExpectation(\"+9(-13+5)\", false);\n const peg$c326 = \"13(#9#5)\";\n const peg$c327 = peg$literalExpectation(\"13(#9#5)\", false);\n const peg$c328 = \"13(+9+5)\";\n const peg$c329 = peg$literalExpectation(\"13(+9+5)\", false);\n const peg$c330 = \"13(#9b5)\";\n const peg$c331 = peg$literalExpectation(\"13(#9b5)\", false);\n const peg$c332 = \"13(+9-5)\";\n const peg$c333 = peg$literalExpectation(\"13(+9-5)\", false);\n const peg$c334 = \"13(add2)\";\n const peg$c335 = peg$literalExpectation(\"13(add2)\", false);\n const peg$c336 = \"13(add4)\";\n const peg$c337 = peg$literalExpectation(\"13(add4)\", false);\n const peg$c338 = \"13(b9#5)\";\n const peg$c339 = peg$literalExpectation(\"13(b9#5)\", false);\n const peg$c340 = \"13(-9+5)\";\n const peg$c341 = peg$literalExpectation(\"13(-9+5)\", false);\n const peg$c342 = \"13(b9b5)\";\n const peg$c343 = peg$literalExpectation(\"13(b9b5)\", false);\n const peg$c344 = \"13(-9-5)\";\n const peg$c345 = peg$literalExpectation(\"13(-9-5)\", false);\n const peg$c346 = \"7(#5#11)\";\n const peg$c347 = peg$literalExpectation(\"7(#5#11)\", false);\n const peg$c348 = \"7(+5+11)\";\n const peg$c349 = peg$literalExpectation(\"7(+5+11)\", false);\n const peg$c350 = \"7(#9b13)\";\n const peg$c351 = peg$literalExpectation(\"7(#9b13)\", false);\n const peg$c352 = \"7(+9-13)\";\n const peg$c353 = peg$literalExpectation(\"7(+9-13)\", false);\n const peg$c354 = \"7(b13#9)\";\n const peg$c355 = peg$literalExpectation(\"7(b13#9)\", false);\n const peg$c356 = \"7(-13+9)\";\n const peg$c357 = peg$literalExpectation(\"7(-13+9)\", false);\n const peg$c358 = \"7(b5#11)\";\n const peg$c359 = peg$literalExpectation(\"7(b5#11)\", false);\n const peg$c360 = \"7(-5+11)\";\n const peg$c361 = peg$literalExpectation(\"7(-5+11)\", false);\n const peg$c362 = \"7(b9b13)\";\n const peg$c363 = peg$literalExpectation(\"7(b9b13)\", false);\n const peg$c364 = \"7(-9-13)\";\n const peg$c365 = peg$literalExpectation(\"7(-9-13)\", false);\n const peg$c366 = \"7(b13b9)\";\n const peg$c367 = peg$literalExpectation(\"7(b13b9)\", false);\n const peg$c368 = \"7(-13-9)\";\n const peg$c369 = peg$literalExpectation(\"7(-13-9)\", false);\n const peg$c370 = \"7sus(b9)\";\n const peg$c371 = peg$literalExpectation(\"7sus(b9)\", false);\n const peg$c372 = \"b69(#11)\";\n const peg$c373 = peg$literalExpectation(\"b69(#11)\", false);\n const peg$c374 = \"m(add11)\";\n const peg$c375 = peg$literalExpectation(\"m(add11)\", false);\n const peg$c376 = \"mi(maj7)\";\n const peg$c377 = peg$literalExpectation(\"mi(maj7)\", false);\n const peg$c378 = \"mi(maj9)\";\n const peg$c379 = peg$literalExpectation(\"mi(maj9)\", false);\n const peg$c380 = \"m11#9b13\";\n const peg$c381 = peg$literalExpectation(\"m11#9b13\", false);\n const peg$c382 = \"m11+9-13\";\n const peg$c383 = peg$literalExpectation(\"m11+9-13\", false);\n const peg$c384 = \"-11#9b13\";\n const peg$c385 = peg$literalExpectation(\"-11#9b13\", false);\n const peg$c386 = \"-11+9-13\";\n const peg$c387 = peg$literalExpectation(\"-11+9-13\", false);\n const peg$c388 = \"m11(b13)\";\n const peg$c389 = peg$literalExpectation(\"m11(b13)\", false);\n const peg$c390 = \"m11(-13)\";\n const peg$c391 = peg$literalExpectation(\"m11(-13)\", false);\n const peg$c392 = \"-11(b13)\";\n const peg$c393 = peg$literalExpectation(\"-11(b13)\", false);\n const peg$c394 = \"-11(-13)\";\n const peg$c395 = peg$literalExpectation(\"-11(-13)\", false);\n const peg$c396 = \"m11#5b13\";\n const peg$c397 = peg$literalExpectation(\"m11#5b13\", false);\n const peg$c398 = \"m11+5-13\";\n const peg$c399 = peg$literalExpectation(\"m11+5-13\", false);\n const peg$c400 = \"-11#5b13\";\n const peg$c401 = peg$literalExpectation(\"-11#5b13\", false);\n const peg$c402 = \"-11+5-13\";\n const peg$c403 = peg$literalExpectation(\"-11+5-13\", false);\n const peg$c404 = \"m11b5b13\";\n const peg$c405 = peg$literalExpectation(\"m11b5b13\", false);\n const peg$c406 = \"m11-5-13\";\n const peg$c407 = peg$literalExpectation(\"m11-5-13\", false);\n const peg$c408 = \"-11b5b13\";\n const peg$c409 = peg$literalExpectation(\"-11b5b13\", false);\n const peg$c410 = \"-11-5-13\";\n const peg$c411 = peg$literalExpectation(\"-11-5-13\", false);\n const peg$c412 = \"m11b9b13\";\n const peg$c413 = peg$literalExpectation(\"m11b9b13\", false);\n const peg$c414 = \"m11-9-13\";\n const peg$c415 = peg$literalExpectation(\"m11-9-13\", false);\n const peg$c416 = \"-11b9b13\";\n const peg$c417 = peg$literalExpectation(\"-11b9b13\", false);\n const peg$c418 = \"-11-9-13\";\n const peg$c419 = peg$literalExpectation(\"-11-9-13\", false);\n const peg$c420 = \"m13(#11)\";\n const peg$c421 = peg$literalExpectation(\"m13(#11)\", false);\n const peg$c422 = \"m13(+11)\";\n const peg$c423 = peg$literalExpectation(\"m13(+11)\", false);\n const peg$c424 = \"-13(#11)\";\n const peg$c425 = peg$literalExpectation(\"-13(#11)\", false);\n const peg$c426 = \"-13(+11)\";\n const peg$c427 = peg$literalExpectation(\"-13(+11)\", false);\n const peg$c428 = \"-13(b13)\";\n const peg$c429 = peg$literalExpectation(\"-13(b13)\", false);\n const peg$c430 = \"-13(-13)\";\n const peg$c431 = peg$literalExpectation(\"-13(-13)\", false);\n const peg$c432 = \"m6(add9)\";\n const peg$c433 = peg$literalExpectation(\"m6(add9)\", false);\n const peg$c434 = \"m7(add4)\";\n const peg$c435 = peg$literalExpectation(\"m7(add4)\", false);\n const peg$c436 = \"m7(add6)\";\n const peg$c437 = peg$literalExpectation(\"m7(add6)\", false);\n const peg$c438 = \"m9(maj7)\";\n const peg$c439 = peg$literalExpectation(\"m9(maj7)\", false);\n const peg$c440 = \"ma11(#5)\";\n const peg$c441 = peg$literalExpectation(\"ma11(#5)\", false);\n const peg$c442 = \"ma11(+5)\";\n const peg$c443 = peg$literalExpectation(\"ma11(+5)\", false);\n const peg$c444 = \"ma11(#9)\";\n const peg$c445 = peg$literalExpectation(\"ma11(#9)\", false);\n const peg$c446 = \"ma11(+9)\";\n const peg$c447 = peg$literalExpectation(\"ma11(+9)\", false);\n const peg$c448 = \"maj11b13\";\n const peg$c449 = peg$literalExpectation(\"maj11b13\", false);\n const peg$c450 = \"maj11-13\";\n const peg$c451 = peg$literalExpectation(\"maj11-13\", false);\n const peg$c452 = \"+11(b13)\";\n const peg$c453 = peg$literalExpectation(\"+11(b13)\", false);\n const peg$c454 = \"+11(-13)\";\n const peg$c455 = peg$literalExpectation(\"+11(-13)\", false);\n const peg$c456 = \"ma11(b5)\";\n const peg$c457 = peg$literalExpectation(\"ma11(b5)\", false);\n const peg$c458 = \"ma11(-5)\";\n const peg$c459 = peg$literalExpectation(\"ma11(-5)\", false);\n const peg$c460 = \"ma11(b9)\";\n const peg$c461 = peg$literalExpectation(\"ma11(b9)\", false);\n const peg$c462 = \"ma11(-9)\";\n const peg$c463 = peg$literalExpectation(\"ma11(-9)\", false);\n const peg$c464 = \"maj13#11\";\n const peg$c465 = peg$literalExpectation(\"maj13#11\", false);\n const peg$c466 = \"maj13+11\";\n const peg$c467 = peg$literalExpectation(\"maj13+11\", false);\n const peg$c468 = \"+13(#11)\";\n const peg$c469 = peg$literalExpectation(\"+13(#11)\", false);\n const peg$c470 = \"+13(+11)\";\n const peg$c471 = peg$literalExpectation(\"+13(+11)\", false);\n const peg$c472 = \"+13#11#5\";\n const peg$c473 = peg$literalExpectation(\"+13#11#5\", false);\n const peg$c474 = \"M13+11+5\";\n const peg$c475 = peg$literalExpectation(\"M13+11+5\", false);\n const peg$c476 = \"ma7#11#5\";\n const peg$c477 = peg$literalExpectation(\"ma7#11#5\", false);\n const peg$c478 = \"ma13(#5)\";\n const peg$c479 = peg$literalExpectation(\"ma13(#5)\", false);\n const peg$c480 = \"ma13(+5)\";\n const peg$c481 = peg$literalExpectation(\"ma13(+5)\", false);\n const peg$c482 = \"ma13(#9)\";\n const peg$c483 = peg$literalExpectation(\"ma13(#9)\", false);\n const peg$c484 = \"ma13(+9)\";\n const peg$c485 = peg$literalExpectation(\"ma13(+9)\", false);\n const peg$c486 = \"ma13+9+5\";\n const peg$c487 = peg$literalExpectation(\"ma13+9+5\", false);\n const peg$c488 = \"ma13(b5)\";\n const peg$c489 = peg$literalExpectation(\"ma13(b5)\", false);\n const peg$c490 = \"ma13(-5)\";\n const peg$c491 = peg$literalExpectation(\"ma13(-5)\", false);\n const peg$c492 = \"ma13(b9)\";\n const peg$c493 = peg$literalExpectation(\"ma13(b9)\", false);\n const peg$c494 = \"ma13(-9)\";\n const peg$c495 = peg$literalExpectation(\"ma13(-9)\", false);\n const peg$c496 = \"ma13-9+5\";\n const peg$c497 = peg$literalExpectation(\"ma13-9+5\", false);\n const peg$c498 = \"ma7(#11)\";\n const peg$c499 = peg$literalExpectation(\"ma7(#11)\", false);\n const peg$c500 = \"ma7(+11)\";\n const peg$c501 = peg$literalExpectation(\"ma7(+11)\", false);\n const peg$c502 = \"maj7(+5)\";\n const peg$c503 = peg$literalExpectation(\"maj7(+5)\", false);\n const peg$c504 = \"maj7(#5)\";\n const peg$c505 = peg$literalExpectation(\"maj7(#5)\", false);\n const peg$c506 = \"aug(ma7)\";\n const peg$c507 = peg$literalExpectation(\"aug(ma7)\", false);\n const peg$c508 = \"maj7(+9)\";\n const peg$c509 = peg$literalExpectation(\"maj7(+9)\", false);\n const peg$c510 = \"maj7(#9)\";\n const peg$c511 = peg$literalExpectation(\"maj7(#9)\", false);\n const peg$c512 = \"ma7(b13)\";\n const peg$c513 = peg$literalExpectation(\"ma7(b13)\", false);\n const peg$c514 = \"ma7(-13)\";\n const peg$c515 = peg$literalExpectation(\"ma7(-13)\", false);\n const peg$c516 = \"maj7(-5)\";\n const peg$c517 = peg$literalExpectation(\"maj7(-5)\", false);\n const peg$c518 = \"maj7(b5)\";\n const peg$c519 = peg$literalExpectation(\"maj7(b5)\", false);\n const peg$c520 = \"maj7(-9)\";\n const peg$c521 = peg$literalExpectation(\"maj7(-9)\", false);\n const peg$c522 = \"maj7(b9)\";\n const peg$c523 = peg$literalExpectation(\"maj7(b9)\", false);\n const peg$c524 = \"ma7(no3)\";\n const peg$c525 = peg$literalExpectation(\"ma7(no3)\", false);\n const peg$c526 = \"ma9(#11)\";\n const peg$c527 = peg$literalExpectation(\"ma9(#11)\", false);\n const peg$c528 = \"ma9(+11)\";\n const peg$c529 = peg$literalExpectation(\"ma9(+11)\", false);\n const peg$c530 = \"ma9+11+5\";\n const peg$c531 = peg$literalExpectation(\"ma9+11+5\", false);\n const peg$c532 = \"maj9(+5)\";\n const peg$c533 = peg$literalExpectation(\"maj9(+5)\", false);\n const peg$c534 = \"maj9(#5)\";\n const peg$c535 = peg$literalExpectation(\"maj9(#5)\", false);\n const peg$c536 = \"ma9(b13)\";\n const peg$c537 = peg$literalExpectation(\"ma9(b13)\", false);\n const peg$c538 = \"ma9(-13)\";\n const peg$c539 = peg$literalExpectation(\"ma9(-13)\", false);\n const peg$c540 = \"ma7b13#5\";\n const peg$c541 = peg$literalExpectation(\"ma7b13#5\", false);\n const peg$c542 = \"ma9-13+5\";\n const peg$c543 = peg$literalExpectation(\"ma9-13+5\", false);\n const peg$c544 = \"maj9(-5)\";\n const peg$c545 = peg$literalExpectation(\"maj9(-5)\", false);\n const peg$c546 = \"maj9(b5)\";\n const peg$c547 = peg$literalExpectation(\"maj9(b5)\", false);\n const peg$c548 = \"sus(no5)\";\n const peg$c549 = peg$literalExpectation(\"sus(no5)\", false);\n const peg$c550 = \"(add11)\";\n const peg$c551 = peg$literalExpectation(\"(add11)\", false);\n const peg$c552 = \"(add13)\";\n const peg$c553 = peg$literalExpectation(\"(add13)\", false);\n const peg$c554 = \"[blank]\";\n const peg$c555 = peg$literalExpectation(\"[blank]\", false);\n const peg$c556 = \"11(b13)\";\n const peg$c557 = peg$literalExpectation(\"11(b13)\", false);\n const peg$c558 = \"11(-13)\";\n const peg$c559 = peg$literalExpectation(\"11(-13)\", false);\n const peg$c560 = \"m11sus4\";\n const peg$c561 = peg$literalExpectation(\"m11sus4\", false);\n const peg$c562 = \"13(#11)\";\n const peg$c563 = peg$literalExpectation(\"13(#11)\", false);\n const peg$c564 = \"13(+11)\";\n const peg$c565 = peg$literalExpectation(\"13(+11)\", false);\n const peg$c566 = \"m13sus4\";\n const peg$c567 = peg$literalExpectation(\"m13sus4\", false);\n const peg$c568 = \"sus2(4)\";\n const peg$c569 = peg$literalExpectation(\"sus2(4)\", false);\n const peg$c570 = \"6(add9)\";\n const peg$c571 = peg$literalExpectation(\"6(add9)\", false);\n const peg$c572 = \"7(#9#5)\";\n const peg$c573 = peg$literalExpectation(\"7(#9#5)\", false);\n const peg$c574 = \"7(#5#9)\";\n const peg$c575 = peg$literalExpectation(\"7(#5#9)\", false);\n const peg$c576 = \"7(+5+9)\";\n const peg$c577 = peg$literalExpectation(\"7(+5+9)\", false);\n const peg$c578 = \"7(#9b5)\";\n const peg$c579 = peg$literalExpectation(\"7(#9b5)\", false);\n const peg$c580 = \"7(b5#9)\";\n const peg$c581 = peg$literalExpectation(\"7(b5#9)\", false);\n const peg$c582 = \"7(-5+9)\";\n const peg$c583 = peg$literalExpectation(\"7(-5+9)\", false);\n const peg$c584 = \"7(b5b9)\";\n const peg$c585 = peg$literalExpectation(\"7(b5b9)\", false);\n const peg$c586 = \"7(-5-9)\";\n const peg$c587 = peg$literalExpectation(\"7(-5-9)\", false);\n const peg$c588 = \"7(b9#5)\";\n const peg$c589 = peg$literalExpectation(\"7(b9#5)\", false);\n const peg$c590 = \"7(#5b9)\";\n const peg$c591 = peg$literalExpectation(\"7(#5b9)\", false);\n const peg$c592 = \"7(+5-9)\";\n const peg$c593 = peg$literalExpectation(\"7(+5-9)\", false);\n const peg$c594 = \"7(b9b5)\";\n const peg$c595 = peg$literalExpectation(\"7(b9b5)\", false);\n const peg$c596 = \"7b9sus4\";\n const peg$c597 = peg$literalExpectation(\"7b9sus4\", false);\n const peg$c598 = \"7sus(6)\";\n const peg$c599 = peg$literalExpectation(\"7sus(6)\", false);\n const peg$c600 = \"m(add4)\";\n const peg$c601 = peg$literalExpectation(\"m(add4)\", false);\n const peg$c602 = \"m(add9)\";\n const peg$c603 = peg$literalExpectation(\"m(add9)\", false);\n const peg$c604 = \"m(maj7)\";\n const peg$c605 = peg$literalExpectation(\"m(maj7)\", false);\n const peg$c606 = \"m(maj9)\";\n const peg$c607 = peg$literalExpectation(\"m(maj9)\", false);\n const peg$c608 = \"m11(#5)\";\n const peg$c609 = peg$literalExpectation(\"m11(#5)\", false);\n const peg$c610 = \"m11(+5)\";\n const peg$c611 = peg$literalExpectation(\"m11(+5)\", false);\n const peg$c612 = \"-11(#5)\";\n const peg$c613 = peg$literalExpectation(\"-11(#5)\", false);\n const peg$c614 = \"-11(+5)\";\n const peg$c615 = peg$literalExpectation(\"-11(+5)\", false);\n const peg$c616 = \"m11(#9)\";\n const peg$c617 = peg$literalExpectation(\"m11(#9)\", false);\n const peg$c618 = \"m11(+9)\";\n const peg$c619 = peg$literalExpectation(\"m11(+9)\", false);\n const peg$c620 = \"-11(#9)\";\n const peg$c621 = peg$literalExpectation(\"-11(#9)\", false);\n const peg$c622 = \"-11(+9)\";\n const peg$c623 = peg$literalExpectation(\"-11(+9)\", false);\n const peg$c624 = \"m11#5#9\";\n const peg$c625 = peg$literalExpectation(\"m11#5#9\", false);\n const peg$c626 = \"m11+5+9\";\n const peg$c627 = peg$literalExpectation(\"m11+5+9\", false);\n const peg$c628 = \"-11#5#9\";\n const peg$c629 = peg$literalExpectation(\"-11#5#9\", false);\n const peg$c630 = \"m11(b5)\";\n const peg$c631 = peg$literalExpectation(\"m11(b5)\", false);\n const peg$c632 = \"m11(-5)\";\n const peg$c633 = peg$literalExpectation(\"m11(-5)\", false);\n const peg$c634 = \"-11(b5)\";\n const peg$c635 = peg$literalExpectation(\"-11(b5)\", false);\n const peg$c636 = \"-11(-5)\";\n const peg$c637 = peg$literalExpectation(\"-11(-5)\", false);\n const peg$c638 = \"m11b5#9\";\n const peg$c639 = peg$literalExpectation(\"m11b5#9\", false);\n const peg$c640 = \"m11-5+9\";\n const peg$c641 = peg$literalExpectation(\"m11-5+9\", false);\n const peg$c642 = \"-11b5#9\";\n const peg$c643 = peg$literalExpectation(\"-11b5#9\", false);\n const peg$c644 = \"-11-5+9\";\n const peg$c645 = peg$literalExpectation(\"-11-5+9\", false);\n const peg$c646 = \"m11b5b9\";\n const peg$c647 = peg$literalExpectation(\"m11b5b9\", false);\n const peg$c648 = \"m11-5-9\";\n const peg$c649 = peg$literalExpectation(\"m11-5-9\", false);\n const peg$c650 = \"-11b5b9\";\n const peg$c651 = peg$literalExpectation(\"-11b5b9\", false);\n const peg$c652 = \"-11-5-9\";\n const peg$c653 = peg$literalExpectation(\"-11-5-9\", false);\n const peg$c654 = \"m11(b9)\";\n const peg$c655 = peg$literalExpectation(\"m11(b9)\", false);\n const peg$c656 = \"m11(-9)\";\n const peg$c657 = peg$literalExpectation(\"m11(-9)\", false);\n const peg$c658 = \"-11(b9)\";\n const peg$c659 = peg$literalExpectation(\"-11(b9)\", false);\n const peg$c660 = \"-11(-9)\";\n const peg$c661 = peg$literalExpectation(\"-11(-9)\", false);\n const peg$c662 = \"m11#5b9\";\n const peg$c663 = peg$literalExpectation(\"m11#5b9\", false);\n const peg$c664 = \"m11+5-9\";\n const peg$c665 = peg$literalExpectation(\"m11+5-9\", false);\n const peg$c666 = \"-11#5b9\";\n const peg$c667 = peg$literalExpectation(\"-11#5b9\", false);\n const peg$c668 = \"m13(#5)\";\n const peg$c669 = peg$literalExpectation(\"m13(#5)\", false);\n const peg$c670 = \"m13(+5)\";\n const peg$c671 = peg$literalExpectation(\"m13(+5)\", false);\n const peg$c672 = \"-13(#5)\";\n const peg$c673 = peg$literalExpectation(\"-13(#5)\", false);\n const peg$c674 = \"-13(+5)\";\n const peg$c675 = peg$literalExpectation(\"-13(+5)\", false);\n const peg$c676 = \"m13(#9)\";\n const peg$c677 = peg$literalExpectation(\"m13(#9)\", false);\n const peg$c678 = \"m13(+9)\";\n const peg$c679 = peg$literalExpectation(\"m13(+9)\", false);\n const peg$c680 = \"-13(#9)\";\n const peg$c681 = peg$literalExpectation(\"-13(#9)\", false);\n const peg$c682 = \"-13(+9)\";\n const peg$c683 = peg$literalExpectation(\"-13(+9)\", false);\n const peg$c684 = \"m13(b5)\";\n const peg$c685 = peg$literalExpectation(\"m13(b5)\", false);\n const peg$c686 = \"m13(-5)\";\n const peg$c687 = peg$literalExpectation(\"m13(-5)\", false);\n const peg$c688 = \"-13(b5)\";\n const peg$c689 = peg$literalExpectation(\"-13(b5)\", false);\n const peg$c690 = \"-13(-5)\";\n const peg$c691 = peg$literalExpectation(\"-13(-5)\", false);\n const peg$c692 = \"m13(b9)\";\n const peg$c693 = peg$literalExpectation(\"m13(b9)\", false);\n const peg$c694 = \"m13(-9)\";\n const peg$c695 = peg$literalExpectation(\"m13(-9)\", false);\n const peg$c696 = \"m(add2)\";\n const peg$c697 = peg$literalExpectation(\"m(add2)\", false);\n const peg$c698 = \"m6(ma7)\";\n const peg$c699 = peg$literalExpectation(\"m6(ma7)\", false);\n const peg$c700 = \"m7(#11)\";\n const peg$c701 = peg$literalExpectation(\"m7(#11)\", false);\n const peg$c702 = \"m7(+11)\";\n const peg$c703 = peg$literalExpectation(\"m7(+11)\", false);\n const peg$c704 = \"-7(#11)\";\n const peg$c705 = peg$literalExpectation(\"-7(#11)\", false);\n const peg$c706 = \"-7(+11)\";\n const peg$c707 = peg$literalExpectation(\"-7(+11)\", false);\n const peg$c708 = \"m7(b13)\";\n const peg$c709 = peg$literalExpectation(\"m7(b13)\", false);\n const peg$c710 = \"m7(-13)\";\n const peg$c711 = peg$literalExpectation(\"m7(-13)\", false);\n const peg$c712 = \"-7(b13)\";\n const peg$c713 = peg$literalExpectation(\"-7(b13)\", false);\n const peg$c714 = \"-7(-13)\";\n const peg$c715 = peg$literalExpectation(\"-7(-13)\", false);\n const peg$c716 = \"m7(no3)\";\n const peg$c717 = peg$literalExpectation(\"m7(no3)\", false);\n const peg$c718 = \"m9(#11)\";\n const peg$c719 = peg$literalExpectation(\"m9(#11)\", false);\n const peg$c720 = \"m9(+11)\";\n const peg$c721 = peg$literalExpectation(\"m9(+11)\", false);\n const peg$c722 = \"-9(#11)\";\n const peg$c723 = peg$literalExpectation(\"-9(#11)\", false);\n const peg$c724 = \"-9(+11)\";\n const peg$c725 = peg$literalExpectation(\"-9(+11)\", false);\n const peg$c726 = \"m9(b13)\";\n const peg$c727 = peg$literalExpectation(\"m9(b13)\", false);\n const peg$c728 = \"m9(-13)\";\n const peg$c729 = peg$literalExpectation(\"m9(-13)\", false);\n const peg$c730 = \"-9(b13)\";\n const peg$c731 = peg$literalExpectation(\"-9(b13)\", false);\n const peg$c732 = \"-9(-13)\";\n const peg$c733 = peg$literalExpectation(\"-9(-13)\", false);\n const peg$c734 = \"m9(ma7)\";\n const peg$c735 = peg$literalExpectation(\"m9(ma7)\", false);\n const peg$c736 = \"maj9b11\";\n const peg$c737 = peg$literalExpectation(\"maj9b11\", false);\n const peg$c738 = \"maj11#5\";\n const peg$c739 = peg$literalExpectation(\"maj11#5\", false);\n const peg$c740 = \"maj11+5\";\n const peg$c741 = peg$literalExpectation(\"maj11+5\", false);\n const peg$c742 = \"+11(#5)\";\n const peg$c743 = peg$literalExpectation(\"+11(#5)\", false);\n const peg$c744 = \"+11(+5)\";\n const peg$c745 = peg$literalExpectation(\"+11(+5)\", false);\n const peg$c746 = \"maj11#9\";\n const peg$c747 = peg$literalExpectation(\"maj11#9\", false);\n const peg$c748 = \"maj11+9\";\n const peg$c749 = peg$literalExpectation(\"maj11+9\", false);\n const peg$c750 = \"+11(#9)\";\n const peg$c751 = peg$literalExpectation(\"+11(#9)\", false);\n const peg$c752 = \"+11(+9)\";\n const peg$c753 = peg$literalExpectation(\"+11(+9)\", false);\n const peg$c754 = \"ma11b13\";\n const peg$c755 = peg$literalExpectation(\"ma11b13\", false);\n const peg$c756 = \"ma11-13\";\n const peg$c757 = peg$literalExpectation(\"ma11-13\", false);\n const peg$c758 = \"maj11b5\";\n const peg$c759 = peg$literalExpectation(\"maj11b5\", false);\n const peg$c760 = \"maj11-5\";\n const peg$c761 = peg$literalExpectation(\"maj11-5\", false);\n const peg$c762 = \"+11(b5)\";\n const peg$c763 = peg$literalExpectation(\"+11(b5)\", false);\n const peg$c764 = \"+11(-5)\";\n const peg$c765 = peg$literalExpectation(\"+11(-5)\", false);\n const peg$c766 = \"maj11b9\";\n const peg$c767 = peg$literalExpectation(\"maj11b9\", false);\n const peg$c768 = \"maj11-9\";\n const peg$c769 = peg$literalExpectation(\"maj11-9\", false);\n const peg$c770 = \"+11(b9)\";\n const peg$c771 = peg$literalExpectation(\"+11(b9)\", false);\n const peg$c772 = \"M11(-9)\";\n const peg$c773 = peg$literalExpectation(\"M11(-9)\", false);\n const peg$c774 = \"ma13+11\";\n const peg$c775 = peg$literalExpectation(\"ma13+11\", false);\n const peg$c776 = \"maj13#5\";\n const peg$c777 = peg$literalExpectation(\"maj13#5\", false);\n const peg$c778 = \"maj13+5\";\n const peg$c779 = peg$literalExpectation(\"maj13+5\", false);\n const peg$c780 = \"+13(#5)\";\n const peg$c781 = peg$literalExpectation(\"+13(#5)\", false);\n const peg$c782 = \"+13(+5)\";\n const peg$c783 = peg$literalExpectation(\"+13(+5)\", false);\n const peg$c784 = \"maj13#9\";\n const peg$c785 = peg$literalExpectation(\"maj13#9\", false);\n const peg$c786 = \"maj13+9\";\n const peg$c787 = peg$literalExpectation(\"maj13+9\", false);\n const peg$c788 = \"+13(#9)\";\n const peg$c789 = peg$literalExpectation(\"+13(#9)\", false);\n const peg$c790 = \"M13(+9)\";\n const peg$c791 = peg$literalExpectation(\"M13(+9)\", false);\n const peg$c792 = \"+13#9#5\";\n const peg$c793 = peg$literalExpectation(\"+13#9#5\", false);\n const peg$c794 = \"+13+9+5\";\n const peg$c795 = peg$literalExpectation(\"+13+9+5\", false);\n const peg$c796 = \"ma7#9#5\";\n const peg$c797 = peg$literalExpectation(\"ma7#9#5\", false);\n const peg$c798 = \"maj13b5\";\n const peg$c799 = peg$literalExpectation(\"maj13b5\", false);\n const peg$c800 = \"maj13-5\";\n const peg$c801 = peg$literalExpectation(\"maj13-5\", false);\n const peg$c802 = \"+13(b5)\";\n const peg$c803 = peg$literalExpectation(\"+13(b5)\", false);\n const peg$c804 = \"+13(-5)\";\n const peg$c805 = peg$literalExpectation(\"+13(-5)\", false);\n const peg$c806 = \"maj13b9\";\n const peg$c807 = peg$literalExpectation(\"maj13b9\", false);\n const peg$c808 = \"maj13-9\";\n const peg$c809 = peg$literalExpectation(\"maj13-9\", false);\n const peg$c810 = \"+13(b9)\";\n const peg$c811 = peg$literalExpectation(\"+13(b9)\", false);\n const peg$c812 = \"+13(-9)\";\n const peg$c813 = peg$literalExpectation(\"+13(-9)\", false);\n const peg$c814 = \"+13b9#5\";\n const peg$c815 = peg$literalExpectation(\"+13b9#5\", false);\n const peg$c816 = \"M13-9+5\";\n const peg$c817 = peg$literalExpectation(\"M13-9+5\", false);\n const peg$c818 = \"ma7b9#5\";\n const peg$c819 = peg$literalExpectation(\"ma7b9#5\", false);\n const peg$c820 = \"maj7#11\";\n const peg$c821 = peg$literalExpectation(\"maj7#11\", false);\n const peg$c822 = \"maj7+11\";\n const peg$c823 = peg$literalExpectation(\"maj7+11\", false);\n const peg$c824 = \"+7(#11)\";\n const peg$c825 = peg$literalExpectation(\"+7(#11)\", false);\n const peg$c826 = \"+7(+11)\";\n const peg$c827 = peg$literalExpectation(\"+7(+11)\", false);\n const peg$c828 = \"ma7(#4)\";\n const peg$c829 = peg$literalExpectation(\"ma7(#4)\", false);\n const peg$c830 = \"ma7(#5)\";\n const peg$c831 = peg$literalExpectation(\"ma7(#5)\", false);\n const peg$c832 = \"ma7(+5)\";\n const peg$c833 = peg$literalExpectation(\"ma7(+5)\", false);\n const peg$c834 = \"aug(M7)\";\n const peg$c835 = peg$literalExpectation(\"aug(M7)\", false);\n const peg$c836 = \"aug(+7)\";\n const peg$c837 = peg$literalExpectation(\"aug(+7)\", false);\n const peg$c838 = \"ma7(#9)\";\n const peg$c839 = peg$literalExpectation(\"ma7(#9)\", false);\n const peg$c840 = \"ma7(+9)\";\n const peg$c841 = peg$literalExpectation(\"ma7(+9)\", false);\n const peg$c842 = \"maj7b13\";\n const peg$c843 = peg$literalExpectation(\"maj7b13\", false);\n const peg$c844 = \"maj7-13\";\n const peg$c845 = peg$literalExpectation(\"maj7-13\", false);\n const peg$c846 = \"+7(b13)\";\n const peg$c847 = peg$literalExpectation(\"+7(b13)\", false);\n const peg$c848 = \"+7(-13)\";\n const peg$c849 = peg$literalExpectation(\"+7(-13)\", false);\n const peg$c850 = \"ma7(b5)\";\n const peg$c851 = peg$literalExpectation(\"ma7(b5)\", false);\n const peg$c852 = \"ma7(-5)\";\n const peg$c853 = peg$literalExpectation(\"ma7(-5)\", false);\n const peg$c854 = \"ma7(b9)\";\n const peg$c855 = peg$literalExpectation(\"ma7(b9)\", false);\n const peg$c856 = \"ma7(-9)\";\n const peg$c857 = peg$literalExpectation(\"ma7(-9)\", false);\n const peg$c858 = \"maj9#11\";\n const peg$c859 = peg$literalExpectation(\"maj9#11\", false);\n const peg$c860 = \"maj9+11\";\n const peg$c861 = peg$literalExpectation(\"maj9+11\", false);\n const peg$c862 = \"+9(#11)\";\n const peg$c863 = peg$literalExpectation(\"+9(#11)\", false);\n const peg$c864 = \"+9(+11)\";\n const peg$c865 = peg$literalExpectation(\"+9(+11)\", false);\n const peg$c866 = \"+9#11#5\";\n const peg$c867 = peg$literalExpectation(\"+9#11#5\", false);\n const peg$c868 = \"M9+11+5\";\n const peg$c869 = peg$literalExpectation(\"M9+11+5\", false);\n const peg$c870 = \"ma9(#4)\";\n const peg$c871 = peg$literalExpectation(\"ma9(#4)\", false);\n const peg$c872 = \"ma9(#5)\";\n const peg$c873 = peg$literalExpectation(\"ma9(#5)\", false);\n const peg$c874 = \"ma9(+5)\";\n const peg$c875 = peg$literalExpectation(\"ma9(+5)\", false);\n const peg$c876 = \"ma9(13)\";\n const peg$c877 = peg$literalExpectation(\"ma9(13)\", false);\n const peg$c878 = \"maj9b13\";\n const peg$c879 = peg$literalExpectation(\"maj9b13\", false);\n const peg$c880 = \"maj9-13\";\n const peg$c881 = peg$literalExpectation(\"maj9-13\", false);\n const peg$c882 = \"+9(b13)\";\n const peg$c883 = peg$literalExpectation(\"+9(b13)\", false);\n const peg$c884 = \"+9(-13)\";\n const peg$c885 = peg$literalExpectation(\"+9(-13)\", false);\n const peg$c886 = \"+9b13#5\";\n const peg$c887 = peg$literalExpectation(\"+9b13#5\", false);\n const peg$c888 = \"M9-13+5\";\n const peg$c889 = peg$literalExpectation(\"M9-13+5\", false);\n const peg$c890 = \"ma9(b5)\";\n const peg$c891 = peg$literalExpectation(\"ma9(b5)\", false);\n const peg$c892 = \"ma9(-5)\";\n const peg$c893 = peg$literalExpectation(\"ma9(-5)\", false);\n const peg$c894 = \"(add2)\";\n const peg$c895 = peg$literalExpectation(\"(add2)\", false);\n const peg$c896 = \"(add4)\";\n const peg$c897 = peg$literalExpectation(\"(add4)\", false);\n const peg$c898 = \"sus(4)\";\n const peg$c899 = peg$literalExpectation(\"sus(4)\", false);\n const peg$c900 = \"(add6)\";\n const peg$c901 = peg$literalExpectation(\"(add6)\", false);\n const peg$c902 = \"(add9)\";\n const peg$c903 = peg$literalExpectation(\"(add9)\", false);\n const peg$c904 = \"(unis)\";\n const peg$c905 = peg$literalExpectation(\"(unis)\", false);\n const peg$c906 = \"11(#5)\";\n const peg$c907 = peg$literalExpectation(\"11(#5)\", false);\n const peg$c908 = \"11(+5)\";\n const peg$c909 = peg$literalExpectation(\"11(+5)\", false);\n const peg$c910 = \"11(#9)\";\n const peg$c911 = peg$literalExpectation(\"11(#9)\", false);\n const peg$c912 = \"11(+9)\";\n const peg$c913 = peg$literalExpectation(\"11(+9)\", false);\n const peg$c914 = \"11(b5)\";\n const peg$c915 = peg$literalExpectation(\"11(b5)\", false);\n const peg$c916 = \"11(-5)\";\n const peg$c917 = peg$literalExpectation(\"11(-5)\", false);\n const peg$c918 = \"11(b9)\";\n const peg$c919 = peg$literalExpectation(\"11(b9)\", false);\n const peg$c920 = \"11(-9)\";\n const peg$c921 = peg$literalExpectation(\"11(-9)\", false);\n const peg$c922 = \"11sus4\";\n const peg$c923 = peg$literalExpectation(\"11sus4\", false);\n const peg$c924 = \"m11sus\";\n const peg$c925 = peg$literalExpectation(\"m11sus\", false);\n const peg$c926 = \"13(#5)\";\n const peg$c927 = peg$literalExpectation(\"13(#5)\", false);\n const peg$c928 = \"13(+5)\";\n const peg$c929 = peg$literalExpectation(\"13(+5)\", false);\n const peg$c930 = \"13(#9)\";\n const peg$c931 = peg$literalExpectation(\"13(#9)\", false);\n const peg$c932 = \"13(+9)\";\n const peg$c933 = peg$literalExpectation(\"13(+9)\", false);\n const peg$c934 = \"13#9#5\";\n const peg$c935 = peg$literalExpectation(\"13#9#5\", false);\n const peg$c936 = \"13+9+5\";\n const peg$c937 = peg$literalExpectation(\"13+9+5\", false);\n const peg$c938 = \"13#9b5\";\n const peg$c939 = peg$literalExpectation(\"13#9b5\", false);\n const peg$c940 = \"13+9-5\";\n const peg$c941 = peg$literalExpectation(\"13+9-5\", false);\n const peg$c942 = \"13(b5)\";\n const peg$c943 = peg$literalExpectation(\"13(b5)\", false);\n const peg$c944 = \"13(-5)\";\n const peg$c945 = peg$literalExpectation(\"13(-5)\", false);\n const peg$c946 = \"13(b9)\";\n const peg$c947 = peg$literalExpectation(\"13(b9)\", false);\n const peg$c948 = \"13(-9)\";\n const peg$c949 = peg$literalExpectation(\"13(-9)\", false);\n const peg$c950 = \"13b9#5\";\n const peg$c951 = peg$literalExpectation(\"13b9#5\", false);\n const peg$c952 = \"13-9+5\";\n const peg$c953 = peg$literalExpectation(\"13-9+5\", false);\n const peg$c954 = \"13b9b5\";\n const peg$c955 = peg$literalExpectation(\"13b9b5\", false);\n const peg$c956 = \"13-9-5\";\n const peg$c957 = peg$literalExpectation(\"13-9-5\", false);\n const peg$c958 = \"13sus4\";\n const peg$c959 = peg$literalExpectation(\"13sus4\", false);\n const peg$c960 = \"m13sus\";\n const peg$c961 = peg$literalExpectation(\"m13sus\", false);\n const peg$c962 = \"2(#11)\";\n const peg$c963 = peg$literalExpectation(\"2(#11)\", false);\n const peg$c964 = \"2(ma7)\";\n const peg$c965 = peg$literalExpectation(\"2(ma7)\", false);\n const peg$c966 = \"2(no3)\";\n const peg$c967 = peg$literalExpectation(\"2(no3)\", false);\n const peg$c968 = \"5(no3)\";\n const peg$c969 = peg$literalExpectation(\"5(no3)\", false);\n const peg$c970 = \"6(no3)\";\n const peg$c971 = peg$literalExpectation(\"6(no3)\", false);\n const peg$c972 = \"7(#11)\";\n const peg$c973 = peg$literalExpectation(\"7(#11)\", false);\n const peg$c974 = \"7(+11)\";\n const peg$c975 = peg$literalExpectation(\"7(+11)\", false);\n const peg$c976 = \"7#5#11\";\n const peg$c977 = peg$literalExpectation(\"7#5#11\", false);\n const peg$c978 = \"7+5+11\";\n const peg$c979 = peg$literalExpectation(\"7+5+11\", false);\n const peg$c980 = \"7#9b13\";\n const peg$c981 = peg$literalExpectation(\"7#9b13\", false);\n const peg$c982 = \"7+9-13\";\n const peg$c983 = peg$literalExpectation(\"7+9-13\", false);\n const peg$c984 = \"7b13#9\";\n const peg$c985 = peg$literalExpectation(\"7b13#9\", false);\n const peg$c986 = \"7-13+9\";\n const peg$c987 = peg$literalExpectation(\"7-13+9\", false);\n const peg$c988 = \"7(b13)\";\n const peg$c989 = peg$literalExpectation(\"7(b13)\", false);\n const peg$c990 = \"7(-13)\";\n const peg$c991 = peg$literalExpectation(\"7(-13)\", false);\n const peg$c992 = \"7b5#11\";\n const peg$c993 = peg$literalExpectation(\"7b5#11\", false);\n const peg$c994 = \"7-5+11\";\n const peg$c995 = peg$literalExpectation(\"7-5+11\", false);\n const peg$c996 = \"7b9b13\";\n const peg$c997 = peg$literalExpectation(\"7b9b13\", false);\n const peg$c998 = \"7-9-13\";\n const peg$c999 = peg$literalExpectation(\"7-9-13\", false);\n const peg$c1000 = \"7b13b9\";\n const peg$c1001 = peg$literalExpectation(\"7b13b9\", false);\n const peg$c1002 = \"7-13-9\";\n const peg$c1003 = peg$literalExpectation(\"7-13-9\", false);\n const peg$c1004 = \"7(no3)\";\n const peg$c1005 = peg$literalExpectation(\"7(no3)\", false);\n const peg$c1006 = \"9(#11)\";\n const peg$c1007 = peg$literalExpectation(\"9(#11)\", false);\n const peg$c1008 = \"9(+11)\";\n const peg$c1009 = peg$literalExpectation(\"9(+11)\", false);\n const peg$c1010 = \"9(b13)\";\n const peg$c1011 = peg$literalExpectation(\"9(b13)\", false);\n const peg$c1012 = \"9(-13)\";\n const peg$c1013 = peg$literalExpectation(\"9(-13)\", false);\n const peg$c1014 = \"m9sus4\";\n const peg$c1015 = peg$literalExpectation(\"m9sus4\", false);\n const peg$c1016 = \"b69sus\";\n const peg$c1017 = peg$literalExpectation(\"b69sus\", false);\n const peg$c1018 = \"m(ma7)\";\n const peg$c1019 = peg$literalExpectation(\"m(ma7)\", false);\n const peg$c1020 = \"m(ma9)\";\n const peg$c1021 = peg$literalExpectation(\"m(ma9)\", false);\n const peg$c1022 = \"m(no5)\";\n const peg$c1023 = peg$literalExpectation(\"m(no5)\", false);\n const peg$c1024 = \"m9+5+9\";\n const peg$c1025 = peg$literalExpectation(\"m9+5+9\", false);\n const peg$c1026 = \"m11b13\";\n const peg$c1027 = peg$literalExpectation(\"m11b13\", false);\n const peg$c1028 = \"m11-13\";\n const peg$c1029 = peg$literalExpectation(\"m11-13\", false);\n const peg$c1030 = \"-11b13\";\n const peg$c1031 = peg$literalExpectation(\"-11b13\", false);\n const peg$c1032 = \"-11-13\";\n const peg$c1033 = peg$literalExpectation(\"-11-13\", false);\n const peg$c1034 = \"m9+5-9\";\n const peg$c1035 = peg$literalExpectation(\"m9+5-9\", false);\n const peg$c1036 = \"m13#11\";\n const peg$c1037 = peg$literalExpectation(\"m13#11\", false);\n const peg$c1038 = \"m13+11\";\n const peg$c1039 = peg$literalExpectation(\"m13+11\", false);\n const peg$c1040 = \"-13#11\";\n const peg$c1041 = peg$literalExpectation(\"-13#11\", false);\n const peg$c1042 = \"-13+11\";\n const peg$c1043 = peg$literalExpectation(\"-13+11\", false);\n const peg$c1044 = \"-13b13\";\n const peg$c1045 = peg$literalExpectation(\"-13b13\", false);\n const peg$c1046 = \"-13-13\";\n const peg$c1047 = peg$literalExpectation(\"-13-13\", false);\n const peg$c1048 = \"m6(#5)\";\n const peg$c1049 = peg$literalExpectation(\"m6(#5)\", false);\n const peg$c1050 = \"m6add9\";\n const peg$c1051 = peg$literalExpectation(\"m6add9\", false);\n const peg$c1052 = \"m6(M7)\";\n const peg$c1053 = peg$literalExpectation(\"m6(M7)\", false);\n const peg$c1054 = \"m6(+7)\";\n const peg$c1055 = peg$literalExpectation(\"m6(+7)\", false);\n const peg$c1056 = \"m7(#5)\";\n const peg$c1057 = peg$literalExpectation(\"m7(#5)\", false);\n const peg$c1058 = \"m7(+5)\";\n const peg$c1059 = peg$literalExpectation(\"m7(+5)\", false);\n const peg$c1060 = \"-7(#5)\";\n const peg$c1061 = peg$literalExpectation(\"-7(#5)\", false);\n const peg$c1062 = \"-7(+5)\";\n const peg$c1063 = peg$literalExpectation(\"-7(+5)\", false);\n const peg$c1064 = \"m7(#9)\";\n const peg$c1065 = peg$literalExpectation(\"m7(#9)\", false);\n const peg$c1066 = \"m7(+9)\";\n const peg$c1067 = peg$literalExpectation(\"m7(+9)\", false);\n const peg$c1068 = \"-7(#9)\";\n const peg$c1069 = peg$literalExpectation(\"-7(#9)\", false);\n const peg$c1070 = \"-7(+9)\";\n const peg$c1071 = peg$literalExpectation(\"-7(+9)\", false);\n const peg$c1072 = \"m7(11)\";\n const peg$c1073 = peg$literalExpectation(\"m7(11)\", false);\n const peg$c1074 = \"m7(b5)\";\n const peg$c1075 = peg$literalExpectation(\"m7(b5)\", false);\n const peg$c1076 = \"m7(-5)\";\n const peg$c1077 = peg$literalExpectation(\"m7(-5)\", false);\n const peg$c1078 = \"-7(b5)\";\n const peg$c1079 = peg$literalExpectation(\"-7(b5)\", false);\n const peg$c1080 = \"-7(-5)\";\n const peg$c1081 = peg$literalExpectation(\"-7(-5)\", false);\n const peg$c1082 = \"m7(b9)\";\n const peg$c1083 = peg$literalExpectation(\"m7(b9)\", false);\n const peg$c1084 = \"m7(-9)\";\n const peg$c1085 = peg$literalExpectation(\"m7(-9)\", false);\n const peg$c1086 = \"-7(b9)\";\n const peg$c1087 = peg$literalExpectation(\"-7(b9)\", false);\n const peg$c1088 = \"-7(-9)\";\n const peg$c1089 = peg$literalExpectation(\"-7(-9)\", false);\n const peg$c1090 = \"m7sus4\";\n const peg$c1091 = peg$literalExpectation(\"m7sus4\", false);\n const peg$c1092 = \"m9(#5)\";\n const peg$c1093 = peg$literalExpectation(\"m9(#5)\", false);\n const peg$c1094 = \"m9(+5)\";\n const peg$c1095 = peg$literalExpectation(\"m9(+5)\", false);\n const peg$c1096 = \"-9(#5)\";\n const peg$c1097 = peg$literalExpectation(\"-9(#5)\", false);\n const peg$c1098 = \"-9(+5)\";\n const peg$c1099 = peg$literalExpectation(\"-9(+5)\", false);\n const peg$c1100 = \"m9(#7)\";\n const peg$c1101 = peg$literalExpectation(\"m9(#7)\", false);\n const peg$c1102 = \"m9(b5)\";\n const peg$c1103 = peg$literalExpectation(\"m9(b5)\", false);\n const peg$c1104 = \"m9(-5)\";\n const peg$c1105 = peg$literalExpectation(\"m9(-5)\", false);\n const peg$c1106 = \"-9(b5)\";\n const peg$c1107 = peg$literalExpectation(\"-9(b5)\", false);\n const peg$c1108 = \"-9(-5)\";\n const peg$c1109 = peg$literalExpectation(\"-9(-5)\", false);\n const peg$c1110 = \"m9(+7)\";\n const peg$c1111 = peg$literalExpectation(\"m9(+7)\", false);\n const peg$c1112 = \"m9(M7)\";\n const peg$c1113 = peg$literalExpectation(\"m9(M7)\", false);\n const peg$c1114 = \"11(#7)\";\n const peg$c1115 = peg$literalExpectation(\"11(#7)\", false);\n const peg$c1116 = \"11(+7)\";\n const peg$c1117 = peg$literalExpectation(\"11(+7)\", false);\n const peg$c1118 = \"ma11#5\";\n const peg$c1119 = peg$literalExpectation(\"ma11#5\", false);\n const peg$c1120 = \"ma11+5\";\n const peg$c1121 = peg$literalExpectation(\"ma11+5\", false);\n const peg$c1122 = \"ma11#9\";\n const peg$c1123 = peg$literalExpectation(\"ma11#9\", false);\n const peg$c1124 = \"ma11+9\";\n const peg$c1125 = peg$literalExpectation(\"ma11+9\", false);\n const peg$c1126 = \"+11b13\";\n const peg$c1127 = peg$literalExpectation(\"+11b13\", false);\n const peg$c1128 = \"M11-13\";\n const peg$c1129 = peg$literalExpectation(\"M11-13\", false);\n const peg$c1130 = \"ma11b5\";\n const peg$c1131 = peg$literalExpectation(\"ma11b5\", false);\n const peg$c1132 = \"ma11-5\";\n const peg$c1133 = peg$literalExpectation(\"ma11-5\", false);\n const peg$c1134 = \"ma11b9\";\n const peg$c1135 = peg$literalExpectation(\"ma11b9\", false);\n const peg$c1136 = \"ma11-9\";\n const peg$c1137 = peg$literalExpectation(\"ma11-9\", false);\n const peg$c1138 = \"13(#7)\";\n const peg$c1139 = peg$literalExpectation(\"13(#7)\", false);\n const peg$c1140 = \"+13#11\";\n const peg$c1141 = peg$literalExpectation(\"+13#11\", false);\n const peg$c1142 = \"M13+11\";\n const peg$c1143 = peg$literalExpectation(\"M13+11\", false);\n const peg$c1144 = \"ma7#11\";\n const peg$c1145 = peg$literalExpectation(\"ma7#11\", false);\n const peg$c1146 = \"ma13#5\";\n const peg$c1147 = peg$literalExpectation(\"ma13#5\", false);\n const peg$c1148 = \"ma13+5\";\n const peg$c1149 = peg$literalExpectation(\"ma13+5\", false);\n const peg$c1150 = \"ma13#9\";\n const peg$c1151 = peg$literalExpectation(\"ma13#9\", false);\n const peg$c1152 = \"ma13+9\";\n const peg$c1153 = peg$literalExpectation(\"ma13+9\", false);\n const peg$c1154 = \"ma13b5\";\n const peg$c1155 = peg$literalExpectation(\"ma13b5\", false);\n const peg$c1156 = \"ma13-5\";\n const peg$c1157 = peg$literalExpectation(\"ma13-5\", false);\n const peg$c1158 = \"ma13b9\";\n const peg$c1159 = peg$literalExpectation(\"ma13b9\", false);\n const peg$c1160 = \"ma13-9\";\n const peg$c1161 = peg$literalExpectation(\"ma13-9\", false);\n const peg$c1162 = \"ma6(9)\";\n const peg$c1163 = peg$literalExpectation(\"ma6(9)\", false);\n const peg$c1164 = \"ma7+11\";\n const peg$c1165 = peg$literalExpectation(\"ma7+11\", false);\n const peg$c1166 = \"maj7#5\";\n const peg$c1167 = peg$literalExpectation(\"maj7#5\", false);\n const peg$c1168 = \"maj7+5\";\n const peg$c1169 = peg$literalExpectation(\"maj7+5\", false);\n const peg$c1170 = \"+7(#5)\";\n const peg$c1171 = peg$literalExpectation(\"+7(#5)\", false);\n const peg$c1172 = \"+7(+5)\";\n const peg$c1173 = peg$literalExpectation(\"+7(+5)\", false);\n const peg$c1174 = \"maj7#9\";\n const peg$c1175 = peg$literalExpectation(\"maj7#9\", false);\n const peg$c1176 = \"maj7+9\";\n const peg$c1177 = peg$literalExpectation(\"maj7+9\", false);\n const peg$c1178 = \"+7(#9)\";\n const peg$c1179 = peg$literalExpectation(\"+7(#9)\", false);\n const peg$c1180 = \"+7(+9)\";\n const peg$c1181 = peg$literalExpectation(\"+7(+9)\", false);\n const peg$c1182 = \"ma7b13\";\n const peg$c1183 = peg$literalExpectation(\"ma7b13\", false);\n const peg$c1184 = \"ma7-13\";\n const peg$c1185 = peg$literalExpectation(\"ma7-13\", false);\n const peg$c1186 = \"maj7b5\";\n const peg$c1187 = peg$literalExpectation(\"maj7b5\", false);\n const peg$c1188 = \"maj7-5\";\n const peg$c1189 = peg$literalExpectation(\"maj7-5\", false);\n const peg$c1190 = \"+7(b5)\";\n const peg$c1191 = peg$literalExpectation(\"+7(b5)\", false);\n const peg$c1192 = \"+7(-5)\";\n const peg$c1193 = peg$literalExpectation(\"+7(-5)\", false);\n const peg$c1194 = \"maj7b9\";\n const peg$c1195 = peg$literalExpectation(\"maj7b9\", false);\n const peg$c1196 = \"maj7-9\";\n const peg$c1197 = peg$literalExpectation(\"maj7-9\", false);\n const peg$c1198 = \"+7(b9)\";\n const peg$c1199 = peg$literalExpectation(\"+7(b9)\", false);\n const peg$c1200 = \"+7(-9)\";\n const peg$c1201 = peg$literalExpectation(\"+7(-9)\", false);\n const peg$c1202 = \"ma9+11\";\n const peg$c1203 = peg$literalExpectation(\"ma9+11\", false);\n const peg$c1204 = \"maj9#5\";\n const peg$c1205 = peg$literalExpectation(\"maj9#5\", false);\n const peg$c1206 = \"maj9+5\";\n const peg$c1207 = peg$literalExpectation(\"maj9+5\", false);\n const peg$c1208 = \"+9(#5)\";\n const peg$c1209 = peg$literalExpectation(\"+9(#5)\", false);\n const peg$c1210 = \"+9(+5)\";\n const peg$c1211 = peg$literalExpectation(\"+9(+5)\", false);\n const peg$c1212 = \"ma9-13\";\n const peg$c1213 = peg$literalExpectation(\"ma9-13\", false);\n const peg$c1214 = \"maj9b5\";\n const peg$c1215 = peg$literalExpectation(\"maj9b5\", false);\n const peg$c1216 = \"maj9-5\";\n const peg$c1217 = peg$literalExpectation(\"maj9-5\", false);\n const peg$c1218 = \"+9(b5)\";\n const peg$c1219 = peg$literalExpectation(\"+9(b5)\", false);\n const peg$c1220 = \"+9(-5)\";\n const peg$c1221 = peg$literalExpectation(\"+9(-5)\", false);\n const peg$c1222 = \"sus#42\";\n const peg$c1223 = peg$literalExpectation(\"sus#42\", false);\n const peg$c1224 = \"add11\";\n const peg$c1225 = peg$literalExpectation(\"add11\", false);\n const peg$c1226 = \"add13\";\n const peg$c1227 = peg$literalExpectation(\"add13\", false);\n const peg$c1228 = \"major\";\n const peg$c1229 = peg$literalExpectation(\"major\", false);\n const peg$c1230 = \"dom11\";\n const peg$c1231 = peg$literalExpectation(\"dom11\", false);\n const peg$c1232 = \"11b13\";\n const peg$c1233 = peg$literalExpectation(\"11b13\", false);\n const peg$c1234 = \"11-13\";\n const peg$c1235 = peg$literalExpectation(\"11-13\", false);\n const peg$c1236 = \"11sus\";\n const peg$c1237 = peg$literalExpectation(\"11sus\", false);\n const peg$c1238 = \"dom13\";\n const peg$c1239 = peg$literalExpectation(\"dom13\", false);\n const peg$c1240 = \"13#11\";\n const peg$c1241 = peg$literalExpectation(\"13#11\", false);\n const peg$c1242 = \"13+11\";\n const peg$c1243 = peg$literalExpectation(\"13+11\", false);\n const peg$c1244 = \"13sus\";\n const peg$c1245 = peg$literalExpectation(\"13sus\", false);\n const peg$c1246 = \"2(#4)\";\n const peg$c1247 = peg$literalExpectation(\"2(#4)\", false);\n const peg$c1248 = \"2(+4)\";\n const peg$c1249 = peg$literalExpectation(\"2(+4)\", false);\n const peg$c1250 = \"(#4)2\";\n const peg$c1251 = peg$literalExpectation(\"(#4)2\", false);\n const peg$c1252 = \"2(+7)\";\n const peg$c1253 = peg$literalExpectation(\"2(+7)\", false);\n const peg$c1254 = \"sus42\";\n const peg$c1255 = peg$literalExpectation(\"sus42\", false);\n const peg$c1256 = \"(no3)\";\n const peg$c1257 = peg$literalExpectation(\"(no3)\", false);\n const peg$c1258 = \"6(b9)\";\n const peg$c1259 = peg$literalExpectation(\"6(b9)\", false);\n const peg$c1260 = \"7(#5)\";\n const peg$c1261 = peg$literalExpectation(\"7(#5)\", false);\n const peg$c1262 = \"7(+5)\";\n const peg$c1263 = peg$literalExpectation(\"7(+5)\", false);\n const peg$c1264 = \"7(#9)\";\n const peg$c1265 = peg$literalExpectation(\"7(#9)\", false);\n const peg$c1266 = \"7(+9)\";\n const peg$c1267 = peg$literalExpectation(\"7(+9)\", false);\n const peg$c1268 = \"7#5#9\";\n const peg$c1269 = peg$literalExpectation(\"7#5#9\", false);\n const peg$c1270 = \"7+5+9\";\n const peg$c1271 = peg$literalExpectation(\"7+5+9\", false);\n const peg$c1272 = \"7(b5)\";\n const peg$c1273 = peg$literalExpectation(\"7(b5)\", false);\n const peg$c1274 = \"7(-5)\";\n const peg$c1275 = peg$literalExpectation(\"7(-5)\", false);\n const peg$c1276 = \"7b5#9\";\n const peg$c1277 = peg$literalExpectation(\"7b5#9\", false);\n const peg$c1278 = \"7-5+9\";\n const peg$c1279 = peg$literalExpectation(\"7-5+9\", false);\n const peg$c1280 = \"7b5b9\";\n const peg$c1281 = peg$literalExpectation(\"7b5b9\", false);\n const peg$c1282 = \"7-5-9\";\n const peg$c1283 = peg$literalExpectation(\"7-5-9\", false);\n const peg$c1284 = \"7(b9)\";\n const peg$c1285 = peg$literalExpectation(\"7(b9)\", false);\n const peg$c1286 = \"7(-9)\";\n const peg$c1287 = peg$literalExpectation(\"7(-9)\", false);\n const peg$c1288 = \"7#5b9\";\n const peg$c1289 = peg$literalExpectation(\"7#5b9\", false);\n const peg$c1290 = \"7+5-9\";\n const peg$c1291 = peg$literalExpectation(\"7+5-9\", false);\n const peg$c1292 = \"7aug5\";\n const peg$c1293 = peg$literalExpectation(\"7aug5\", false);\n const peg$c1294 = \"7sus4\";\n const peg$c1295 = peg$literalExpectation(\"7sus4\", false);\n const peg$c1296 = \"9(#5)\";\n const peg$c1297 = peg$literalExpectation(\"9(#5)\", false);\n const peg$c1298 = \"9(+5)\";\n const peg$c1299 = peg$literalExpectation(\"9(+5)\", false);\n const peg$c1300 = \"9(b5)\";\n const peg$c1301 = peg$literalExpectation(\"9(b5)\", false);\n const peg$c1302 = \"9(-5)\";\n const peg$c1303 = peg$literalExpectation(\"9(-5)\", false);\n const peg$c1304 = \"9sus4\";\n const peg$c1305 = peg$literalExpectation(\"9sus4\", false);\n const peg$c1306 = \"m9sus\";\n const peg$c1307 = peg$literalExpectation(\"m9sus\", false);\n const peg$c1308 = \"b9sus\";\n const peg$c1309 = peg$literalExpectation(\"b9sus\", false);\n const peg$c1310 = \"m(b5)\";\n const peg$c1311 = peg$literalExpectation(\"m(b5)\", false);\n const peg$c1312 = \"m(-5)\";\n const peg$c1313 = peg$literalExpectation(\"m(-5)\", false);\n const peg$c1314 = \"-(b5)\";\n const peg$c1315 = peg$literalExpectation(\"-(b5)\", false);\n const peg$c1316 = \"minor\";\n const peg$c1317 = peg$literalExpectation(\"minor\", false);\n const peg$c1318 = \"m(11)\";\n const peg$c1319 = peg$literalExpectation(\"m(11)\", false);\n const peg$c1320 = \"m(M7)\";\n const peg$c1321 = peg$literalExpectation(\"m(M7)\", false);\n const peg$c1322 = \"m(+7)\";\n const peg$c1323 = peg$literalExpectation(\"m(+7)\", false);\n const peg$c1324 = \"m(M9)\";\n const peg$c1325 = peg$literalExpectation(\"m(M9)\", false);\n const peg$c1326 = \"m(+9)\";\n const peg$c1327 = peg$literalExpectation(\"m(+9)\", false);\n const peg$c1328 = \"min11\";\n const peg$c1329 = peg$literalExpectation(\"min11\", false);\n const peg$c1330 = \"m11#5\";\n const peg$c1331 = peg$literalExpectation(\"m11#5\", false);\n const peg$c1332 = \"m11+5\";\n const peg$c1333 = peg$literalExpectation(\"m11+5\", false);\n const peg$c1334 = \"-11#5\";\n const peg$c1335 = peg$literalExpectation(\"-11#5\", false);\n const peg$c1336 = \"m11#9\";\n const peg$c1337 = peg$literalExpectation(\"m11#9\", false);\n const peg$c1338 = \"m11+9\";\n const peg$c1339 = peg$literalExpectation(\"m11+9\", false);\n const peg$c1340 = \"-11#9\";\n const peg$c1341 = peg$literalExpectation(\"-11#9\", false);\n const peg$c1342 = \"-11+9\";\n const peg$c1343 = peg$literalExpectation(\"-11+9\", false);\n const peg$c1344 = \"m11b5\";\n const peg$c1345 = peg$literalExpectation(\"m11b5\", false);\n const peg$c1346 = \"m11-5\";\n const peg$c1347 = peg$literalExpectation(\"m11-5\", false);\n const peg$c1348 = \"-11b5\";\n const peg$c1349 = peg$literalExpectation(\"-11b5\", false);\n const peg$c1350 = \"m11b9\";\n const peg$c1351 = peg$literalExpectation(\"m11b9\", false);\n const peg$c1352 = \"m11-9\";\n const peg$c1353 = peg$literalExpectation(\"m11-9\", false);\n const peg$c1354 = \"-11b9\";\n const peg$c1355 = peg$literalExpectation(\"-11b9\", false);\n const peg$c1356 = \"-11-9\";\n const peg$c1357 = peg$literalExpectation(\"-11-9\", false);\n const peg$c1358 = \"min13\";\n const peg$c1359 = peg$literalExpectation(\"min13\", false);\n const peg$c1360 = \"m13#5\";\n const peg$c1361 = peg$literalExpectation(\"m13#5\", false);\n const peg$c1362 = \"m13+5\";\n const peg$c1363 = peg$literalExpectation(\"m13+5\", false);\n const peg$c1364 = \"-13#5\";\n const peg$c1365 = peg$literalExpectation(\"-13#5\", false);\n const peg$c1366 = \"m13#9\";\n const peg$c1367 = peg$literalExpectation(\"m13#9\", false);\n const peg$c1368 = \"m13+9\";\n const peg$c1369 = peg$literalExpectation(\"m13+9\", false);\n const peg$c1370 = \"-13#9\";\n const peg$c1371 = peg$literalExpectation(\"-13#9\", false);\n const peg$c1372 = \"-13+9\";\n const peg$c1373 = peg$literalExpectation(\"-13+9\", false);\n const peg$c1374 = \"m13b5\";\n const peg$c1375 = peg$literalExpectation(\"m13b5\", false);\n const peg$c1376 = \"m13-5\";\n const peg$c1377 = peg$literalExpectation(\"m13-5\", false);\n const peg$c1378 = \"-13b5\";\n const peg$c1379 = peg$literalExpectation(\"-13b5\", false);\n const peg$c1380 = \"-13-5\";\n const peg$c1381 = peg$literalExpectation(\"-13-5\", false);\n const peg$c1382 = \"m13b9\";\n const peg$c1383 = peg$literalExpectation(\"m13b9\", false);\n const peg$c1384 = \"m13-9\";\n const peg$c1385 = peg$literalExpectation(\"m13-9\", false);\n const peg$c1386 = \"madd2\";\n const peg$c1387 = peg$literalExpectation(\"madd2\", false);\n const peg$c1388 = \"m6(9)\";\n const peg$c1389 = peg$literalExpectation(\"m6(9)\", false);\n const peg$c1390 = \"m7#11\";\n const peg$c1391 = peg$literalExpectation(\"m7#11\", false);\n const peg$c1392 = \"m7+11\";\n const peg$c1393 = peg$literalExpectation(\"m7+11\", false);\n const peg$c1394 = \"-7#11\";\n const peg$c1395 = peg$literalExpectation(\"-7#11\", false);\n const peg$c1396 = \"-7+11\";\n const peg$c1397 = peg$literalExpectation(\"-7+11\", false);\n const peg$c1398 = \"m7(4)\";\n const peg$c1399 = peg$literalExpectation(\"m7(4)\", false);\n const peg$c1400 = \"m7(6)\";\n const peg$c1401 = peg$literalExpectation(\"m7(6)\", false);\n const peg$c1402 = \"m7b13\";\n const peg$c1403 = peg$literalExpectation(\"m7b13\", false);\n const peg$c1404 = \"m7-13\";\n const peg$c1405 = peg$literalExpectation(\"m7-13\", false);\n const peg$c1406 = \"-7b13\";\n const peg$c1407 = peg$literalExpectation(\"-7b13\", false);\n const peg$c1408 = \"-7-13\";\n const peg$c1409 = peg$literalExpectation(\"-7-13\", false);\n const peg$c1410 = \"m7sus\";\n const peg$c1411 = peg$literalExpectation(\"m7sus\", false);\n const peg$c1412 = \"m9#11\";\n const peg$c1413 = peg$literalExpectation(\"m9#11\", false);\n const peg$c1414 = \"m9+11\";\n const peg$c1415 = peg$literalExpectation(\"m9+11\", false);\n const peg$c1416 = \"-9#11\";\n const peg$c1417 = peg$literalExpectation(\"-9#11\", false);\n const peg$c1418 = \"-9+11\";\n const peg$c1419 = peg$literalExpectation(\"-9+11\", false);\n const peg$c1420 = \"m9b13\";\n const peg$c1421 = peg$literalExpectation(\"m9b13\", false);\n const peg$c1422 = \"m9-13\";\n const peg$c1423 = peg$literalExpectation(\"m9-13\", false);\n const peg$c1424 = \"-9b13\";\n const peg$c1425 = peg$literalExpectation(\"-9b13\", false);\n const peg$c1426 = \"-9-13\";\n const peg$c1427 = peg$literalExpectation(\"-9-13\", false);\n const peg$c1428 = \"+11#5\";\n const peg$c1429 = peg$literalExpectation(\"+11#5\", false);\n const peg$c1430 = \"M11+5\";\n const peg$c1431 = peg$literalExpectation(\"M11+5\", false);\n const peg$c1432 = \"+11#9\";\n const peg$c1433 = peg$literalExpectation(\"+11#9\", false);\n const peg$c1434 = \"M11+9\";\n const peg$c1435 = peg$literalExpectation(\"M11+9\", false);\n const peg$c1436 = \"+11b5\";\n const peg$c1437 = peg$literalExpectation(\"+11b5\", false);\n const peg$c1438 = \"M11-5\";\n const peg$c1439 = peg$literalExpectation(\"M11-5\", false);\n const peg$c1440 = \"+11b9\";\n const peg$c1441 = peg$literalExpectation(\"+11b9\", false);\n const peg$c1442 = \"+11-9\";\n const peg$c1443 = peg$literalExpectation(\"+11-9\", false);\n const peg$c1444 = \"+13#5\";\n const peg$c1445 = peg$literalExpectation(\"+13#5\", false);\n const peg$c1446 = \"M13+5\";\n const peg$c1447 = peg$literalExpectation(\"M13+5\", false);\n const peg$c1448 = \"+13#9\";\n const peg$c1449 = peg$literalExpectation(\"+13#9\", false);\n const peg$c1450 = \"+13+9\";\n const peg$c1451 = peg$literalExpectation(\"+13+9\", false);\n const peg$c1452 = \"+13b5\";\n const peg$c1453 = peg$literalExpectation(\"+13b5\", false);\n const peg$c1454 = \"M13-5\";\n const peg$c1455 = peg$literalExpectation(\"M13-5\", false);\n const peg$c1456 = \"+13b9\";\n const peg$c1457 = peg$literalExpectation(\"+13b9\", false);\n const peg$c1458 = \"M13-9\";\n const peg$c1459 = peg$literalExpectation(\"M13-9\", false);\n const peg$c1460 = \"+7#11\";\n const peg$c1461 = peg$literalExpectation(\"+7#11\", false);\n const peg$c1462 = \"M7+11\";\n const peg$c1463 = peg$literalExpectation(\"M7+11\", false);\n const peg$c1464 = \"ma7#5\";\n const peg$c1465 = peg$literalExpectation(\"ma7#5\", false);\n const peg$c1466 = \"ma7+5\";\n const peg$c1467 = peg$literalExpectation(\"ma7+5\", false);\n const peg$c1468 = \"ma7#9\";\n const peg$c1469 = peg$literalExpectation(\"ma7#9\", false);\n const peg$c1470 = \"ma7+9\";\n const peg$c1471 = peg$literalExpectation(\"ma7+9\", false);\n const peg$c1472 = \"+7b13\";\n const peg$c1473 = peg$literalExpectation(\"+7b13\", false);\n const peg$c1474 = \"M7-13\";\n const peg$c1475 = peg$literalExpectation(\"M7-13\", false);\n const peg$c1476 = \"ma7b5\";\n const peg$c1477 = peg$literalExpectation(\"ma7b5\", false);\n const peg$c1478 = \"ma7-5\";\n const peg$c1479 = peg$literalExpectation(\"ma7-5\", false);\n const peg$c1480 = \"ma7b9\";\n const peg$c1481 = peg$literalExpectation(\"ma7b9\", false);\n const peg$c1482 = \"ma7-9\";\n const peg$c1483 = peg$literalExpectation(\"ma7-9\", false);\n const peg$c1484 = \"9(#7)\";\n const peg$c1485 = peg$literalExpectation(\"9(#7)\", false);\n const peg$c1486 = \"+9#11\";\n const peg$c1487 = peg$literalExpectation(\"+9#11\", false);\n const peg$c1488 = \"M9+11\";\n const peg$c1489 = peg$literalExpectation(\"M9+11\", false);\n const peg$c1490 = \"ma9#5\";\n const peg$c1491 = peg$literalExpectation(\"ma9#5\", false);\n const peg$c1492 = \"ma9+5\";\n const peg$c1493 = peg$literalExpectation(\"ma9+5\", false);\n const peg$c1494 = \"+9b13\";\n const peg$c1495 = peg$literalExpectation(\"+9b13\", false);\n const peg$c1496 = \"M9-13\";\n const peg$c1497 = peg$literalExpectation(\"M9-13\", false);\n const peg$c1498 = \"ma9b5\";\n const peg$c1499 = peg$literalExpectation(\"ma9b5\", false);\n const peg$c1500 = \"ma9-5\";\n const peg$c1501 = peg$literalExpectation(\"ma9-5\", false);\n const peg$c1502 = \"(#4)\";\n const peg$c1503 = peg$literalExpectation(\"(#4)\", false);\n const peg$c1504 = \"(+4)\";\n const peg$c1505 = peg$literalExpectation(\"(+4)\", false);\n const peg$c1506 = \"(11)\";\n const peg$c1507 = peg$literalExpectation(\"(11)\", false);\n const peg$c1508 = \"(13)\";\n const peg$c1509 = peg$literalExpectation(\"(13)\", false);\n const peg$c1510 = \"add2\";\n const peg$c1511 = peg$literalExpectation(\"add2\", false);\n const peg$c1512 = \"add4\";\n const peg$c1513 = peg$literalExpectation(\"add4\", false);\n const peg$c1514 = \"add6\";\n const peg$c1515 = peg$literalExpectation(\"add6\", false);\n const peg$c1516 = \"add9\";\n const peg$c1517 = peg$literalExpectation(\"add9\", false);\n const peg$c1518 = \"(b5)\";\n const peg$c1519 = peg$literalExpectation(\"(b5)\", false);\n const peg$c1520 = \"(-5)\";\n const peg$c1521 = peg$literalExpectation(\"(-5)\", false);\n const peg$c1522 = \"2(6)\";\n const peg$c1523 = peg$literalExpectation(\"2(6)\", false);\n const peg$c1524 = \"(b6)\";\n const peg$c1525 = peg$literalExpectation(\"(b6)\", false);\n const peg$c1526 = \"unis\";\n const peg$c1527 = peg$literalExpectation(\"unis\", false);\n const peg$c1528 = \"Majj\";\n const peg$c1529 = peg$literalExpectation(\"Majj\", false);\n const peg$c1530 = \"(#5)\";\n const peg$c1531 = peg$literalExpectation(\"(#5)\", false);\n const peg$c1532 = \"(+5)\";\n const peg$c1533 = peg$literalExpectation(\"(+5)\", false);\n const peg$c1534 = \"11#5\";\n const peg$c1535 = peg$literalExpectation(\"11#5\", false);\n const peg$c1536 = \"11+5\";\n const peg$c1537 = peg$literalExpectation(\"11+5\", false);\n const peg$c1538 = \"11#9\";\n const peg$c1539 = peg$literalExpectation(\"11#9\", false);\n const peg$c1540 = \"11+9\";\n const peg$c1541 = peg$literalExpectation(\"11+9\", false);\n const peg$c1542 = \"11b5\";\n const peg$c1543 = peg$literalExpectation(\"11b5\", false);\n const peg$c1544 = \"11-5\";\n const peg$c1545 = peg$literalExpectation(\"11-5\", false);\n const peg$c1546 = \"11b9\";\n const peg$c1547 = peg$literalExpectation(\"11b9\", false);\n const peg$c1548 = \"11-9\";\n const peg$c1549 = peg$literalExpectation(\"11-9\", false);\n const peg$c1550 = \"13#5\";\n const peg$c1551 = peg$literalExpectation(\"13#5\", false);\n const peg$c1552 = \"13+5\";\n const peg$c1553 = peg$literalExpectation(\"13+5\", false);\n const peg$c1554 = \"13#9\";\n const peg$c1555 = peg$literalExpectation(\"13#9\", false);\n const peg$c1556 = \"13+9\";\n const peg$c1557 = peg$literalExpectation(\"13+9\", false);\n const peg$c1558 = \"13b5\";\n const peg$c1559 = peg$literalExpectation(\"13b5\", false);\n const peg$c1560 = \"13-5\";\n const peg$c1561 = peg$literalExpectation(\"13-5\", false);\n const peg$c1562 = \"13b9\";\n const peg$c1563 = peg$literalExpectation(\"13b9\", false);\n const peg$c1564 = \"13-9\";\n const peg$c1565 = peg$literalExpectation(\"13-9\", false);\n const peg$c1566 = \"sus2\";\n const peg$c1567 = peg$literalExpectation(\"sus2\", false);\n const peg$c1568 = \"2(4)\";\n const peg$c1569 = peg$literalExpectation(\"2(4)\", false);\n const peg$c1570 = \"4(2)\";\n const peg$c1571 = peg$literalExpectation(\"4(2)\", false);\n const peg$c1572 = \"6(2)\";\n const peg$c1573 = peg$literalExpectation(\"6(2)\", false);\n const peg$c1574 = \"6(9)\";\n const peg$c1575 = peg$literalExpectation(\"6(9)\", false);\n const peg$c1576 = \"dom7\";\n const peg$c1577 = peg$literalExpectation(\"dom7\", false);\n const peg$c1578 = \"7#11\";\n const peg$c1579 = peg$literalExpectation(\"7#11\", false);\n const peg$c1580 = \"7+11\";\n const peg$c1581 = peg$literalExpectation(\"7+11\", false);\n const peg$c1582 = \"aug7\";\n const peg$c1583 = peg$literalExpectation(\"aug7\", false);\n const peg$c1584 = \"7(6)\";\n const peg$c1585 = peg$literalExpectation(\"7(6)\", false);\n const peg$c1586 = \"7b13\";\n const peg$c1587 = peg$literalExpectation(\"7b13\", false);\n const peg$c1588 = \"7-13\";\n const peg$c1589 = peg$literalExpectation(\"7-13\", false);\n const peg$c1590 = \"7sus\";\n const peg$c1591 = peg$literalExpectation(\"7sus\", false);\n const peg$c1592 = \"dom9\";\n const peg$c1593 = peg$literalExpectation(\"dom9\", false);\n const peg$c1594 = \"9#11\";\n const peg$c1595 = peg$literalExpectation(\"9#11\", false);\n const peg$c1596 = \"9+11\";\n const peg$c1597 = peg$literalExpectation(\"9+11\", false);\n const peg$c1598 = \"aug9\";\n const peg$c1599 = peg$literalExpectation(\"aug9\", false);\n const peg$c1600 = \"9b13\";\n const peg$c1601 = peg$literalExpectation(\"9b13\", false);\n const peg$c1602 = \"9-13\";\n const peg$c1603 = peg$literalExpectation(\"9-13\", false);\n const peg$c1604 = \"9aug\";\n const peg$c1605 = peg$literalExpectation(\"9aug\", false);\n const peg$c1606 = \"9sus\";\n const peg$c1607 = peg$literalExpectation(\"9sus\", false);\n const peg$c1608 = \"dim7\";\n const peg$c1609 = peg$literalExpectation(\"dim7\", false);\n const peg$c1610 = \"m(4)\";\n const peg$c1611 = peg$literalExpectation(\"m(4)\", false);\n const peg$c1612 = \"m(9)\";\n const peg$c1613 = peg$literalExpectation(\"m(9)\", false);\n const peg$c1614 = \"mi11\";\n const peg$c1615 = peg$literalExpectation(\"mi11\", false);\n const peg$c1616 = \"m9+5\";\n const peg$c1617 = peg$literalExpectation(\"m9+5\", false);\n const peg$c1618 = \"-9-5\";\n const peg$c1619 = peg$literalExpectation(\"-9-5\", false);\n const peg$c1620 = \"mi13\";\n const peg$c1621 = peg$literalExpectation(\"mi13\", false);\n const peg$c1622 = \"min2\";\n const peg$c1623 = peg$literalExpectation(\"min2\", false);\n const peg$c1624 = \"min6\";\n const peg$c1625 = peg$literalExpectation(\"min6\", false);\n const peg$c1626 = \"m6M7\";\n const peg$c1627 = peg$literalExpectation(\"m6M7\", false);\n const peg$c1628 = \"m6+7\";\n const peg$c1629 = peg$literalExpectation(\"m6+7\", false);\n const peg$c1630 = \"min7\";\n const peg$c1631 = peg$literalExpectation(\"min7\", false);\n const peg$c1632 = \"m7#5\";\n const peg$c1633 = peg$literalExpectation(\"m7#5\", false);\n const peg$c1634 = \"m7+5\";\n const peg$c1635 = peg$literalExpectation(\"m7+5\", false);\n const peg$c1636 = \"-7#5\";\n const peg$c1637 = peg$literalExpectation(\"-7#5\", false);\n const peg$c1638 = \"m7#9\";\n const peg$c1639 = peg$literalExpectation(\"m7#9\", false);\n const peg$c1640 = \"m7+9\";\n const peg$c1641 = peg$literalExpectation(\"m7+9\", false);\n const peg$c1642 = \"-7#9\";\n const peg$c1643 = peg$literalExpectation(\"-7#9\", false);\n const peg$c1644 = \"m7b5\";\n const peg$c1645 = peg$literalExpectation(\"m7b5\", false);\n const peg$c1646 = \"m7-5\";\n const peg$c1647 = peg$literalExpectation(\"m7-5\", false);\n const peg$c1648 = \"-7b5\";\n const peg$c1649 = peg$literalExpectation(\"-7b5\", false);\n const peg$c1650 = \"m7b9\";\n const peg$c1651 = peg$literalExpectation(\"m7b9\", false);\n const peg$c1652 = \"m7-9\";\n const peg$c1653 = peg$literalExpectation(\"m7-9\", false);\n const peg$c1654 = \"-7b9\";\n const peg$c1655 = peg$literalExpectation(\"-7b9\", false);\n const peg$c1656 = \"min9\";\n const peg$c1657 = peg$literalExpectation(\"min9\", false);\n const peg$c1658 = \"m9#5\";\n const peg$c1659 = peg$literalExpectation(\"m9#5\", false);\n const peg$c1660 = \"-9#5\";\n const peg$c1661 = peg$literalExpectation(\"-9#5\", false);\n const peg$c1662 = \"m9b5\";\n const peg$c1663 = peg$literalExpectation(\"m9b5\", false);\n const peg$c1664 = \"m9-5\";\n const peg$c1665 = peg$literalExpectation(\"m9-5\", false);\n const peg$c1666 = \"-9b5\";\n const peg$c1667 = peg$literalExpectation(\"-9b5\", false);\n const peg$c1668 = \"m9M7\";\n const peg$c1669 = peg$literalExpectation(\"m9M7\", false);\n const peg$c1670 = \"maj9\";\n const peg$c1671 = peg$literalExpectation(\"maj9\", false);\n const peg$c1672 = \"ma11\";\n const peg$c1673 = peg$literalExpectation(\"ma11\", false);\n const peg$c1674 = \"11#7\";\n const peg$c1675 = peg$literalExpectation(\"11#7\", false);\n const peg$c1676 = \"11+7\";\n const peg$c1677 = peg$literalExpectation(\"11+7\", false);\n const peg$c1678 = \"ma13\";\n const peg$c1679 = peg$literalExpectation(\"ma13\", false);\n const peg$c1680 = \"ma69\";\n const peg$c1681 = peg$literalExpectation(\"ma69\", false);\n const peg$c1682 = \"Maj7\";\n const peg$c1683 = peg$literalExpectation(\"Maj7\", false);\n const peg$c1684 = \"maj7\";\n const peg$c1685 = peg$literalExpectation(\"maj7\", false);\n const peg$c1686 = \"+7#5\";\n const peg$c1687 = peg$literalExpectation(\"+7#5\", false);\n const peg$c1688 = \"M7+5\";\n const peg$c1689 = peg$literalExpectation(\"M7+5\", false);\n const peg$c1690 = \"+7#9\";\n const peg$c1691 = peg$literalExpectation(\"+7#9\", false);\n const peg$c1692 = \"M7+9\";\n const peg$c1693 = peg$literalExpectation(\"M7+9\", false);\n const peg$c1694 = \"+7b5\";\n const peg$c1695 = peg$literalExpectation(\"+7b5\", false);\n const peg$c1696 = \"M7-5\";\n const peg$c1697 = peg$literalExpectation(\"M7-5\", false);\n const peg$c1698 = \"+7b9\";\n const peg$c1699 = peg$literalExpectation(\"+7b9\", false);\n const peg$c1700 = \"M7-9\";\n const peg$c1701 = peg$literalExpectation(\"M7-9\", false);\n const peg$c1702 = \"+9#5\";\n const peg$c1703 = peg$literalExpectation(\"+9#5\", false);\n const peg$c1704 = \"M9+5\";\n const peg$c1705 = peg$literalExpectation(\"M9+5\", false);\n const peg$c1706 = \"+9b5\";\n const peg$c1707 = peg$literalExpectation(\"+9b5\", false);\n const peg$c1708 = \"M9-5\";\n const peg$c1709 = peg$literalExpectation(\"M9-5\", false);\n const peg$c1710 = \"sus4\";\n const peg$c1711 = peg$literalExpectation(\"sus4\", false);\n const peg$c1712 = \"(2)\";\n const peg$c1713 = peg$literalExpectation(\"(2)\", false);\n const peg$c1714 = \"(4)\";\n const peg$c1715 = peg$literalExpectation(\"(4)\", false);\n const peg$c1716 = \"(6)\";\n const peg$c1717 = peg$literalExpectation(\"(6)\", false);\n const peg$c1718 = \"(7)\";\n const peg$c1719 = peg$literalExpectation(\"(7)\", false);\n const peg$c1720 = \"(9)\";\n const peg$c1721 = peg$literalExpectation(\"(9)\", false);\n const peg$c1722 = \"maj\";\n const peg$c1723 = peg$literalExpectation(\"maj\", false);\n const peg$c1724 = \"aug\";\n const peg$c1725 = peg$literalExpectation(\"aug\", false);\n const peg$c1726 = \"2+4\";\n const peg$c1727 = peg$literalExpectation(\"2+4\", false);\n const peg$c1728 = \"2#4\";\n const peg$c1729 = peg$literalExpectation(\"2#4\", false);\n const peg$c1730 = \"no3\";\n const peg$c1731 = peg$literalExpectation(\"no3\", false);\n const peg$c1732 = \"7#5\";\n const peg$c1733 = peg$literalExpectation(\"7#5\", false);\n const peg$c1734 = \"7+5\";\n const peg$c1735 = peg$literalExpectation(\"7+5\", false);\n const peg$c1736 = \"7#9\";\n const peg$c1737 = peg$literalExpectation(\"7#9\", false);\n const peg$c1738 = \"7+9\";\n const peg$c1739 = peg$literalExpectation(\"7+9\", false);\n const peg$c1740 = \"7b5\";\n const peg$c1741 = peg$literalExpectation(\"7b5\", false);\n const peg$c1742 = \"7-5\";\n const peg$c1743 = peg$literalExpectation(\"7-5\", false);\n const peg$c1744 = \"7b9\";\n const peg$c1745 = peg$literalExpectation(\"7b9\", false);\n const peg$c1746 = \"7-9\";\n const peg$c1747 = peg$literalExpectation(\"7-9\", false);\n const peg$c1748 = \"9#5\";\n const peg$c1749 = peg$literalExpectation(\"9#5\", false);\n const peg$c1750 = \"9+5\";\n const peg$c1751 = peg$literalExpectation(\"9+5\", false);\n const peg$c1752 = \"9b5\";\n const peg$c1753 = peg$literalExpectation(\"9b5\", false);\n const peg$c1754 = \"9-5\";\n const peg$c1755 = peg$literalExpectation(\"9-5\", false);\n const peg$c1756 = \"dim\";\n const peg$c1757 = peg$literalExpectation(\"dim\", false);\n const peg$c1758 = \"mb5\";\n const peg$c1759 = peg$literalExpectation(\"mb5\", false);\n const peg$c1760 = \"m-5\";\n const peg$c1761 = peg$literalExpectation(\"m-5\", false);\n const peg$c1762 = \"-b5\";\n const peg$c1763 = peg$literalExpectation(\"-b5\", false);\n const peg$c1764 = \"min\";\n const peg$c1765 = peg$literalExpectation(\"min\", false);\n const peg$c1766 = \"m+7\";\n const peg$c1767 = peg$literalExpectation(\"m+7\", false);\n const peg$c1768 = \"m+9\";\n const peg$c1769 = peg$literalExpectation(\"m+9\", false);\n const peg$c1770 = \"m11\";\n const peg$c1771 = peg$literalExpectation(\"m11\", false);\n const peg$c1772 = \"-11\";\n const peg$c1773 = peg$literalExpectation(\"-11\", false);\n const peg$c1774 = \"m13\";\n const peg$c1775 = peg$literalExpectation(\"m13\", false);\n const peg$c1776 = \"-13\";\n const peg$c1777 = peg$literalExpectation(\"-13\", false);\n const peg$c1778 = \"mi2\";\n const peg$c1779 = peg$literalExpectation(\"mi2\", false);\n const peg$c1780 = \"mi6\";\n const peg$c1781 = peg$literalExpectation(\"mi6\", false);\n const peg$c1782 = \"m69\";\n const peg$c1783 = peg$literalExpectation(\"m69\", false);\n const peg$c1784 = \"mi7\";\n const peg$c1785 = peg$literalExpectation(\"mi7\", false);\n const peg$c1786 = \"m74\";\n const peg$c1787 = peg$literalExpectation(\"m74\", false);\n const peg$c1788 = \"mi9\";\n const peg$c1789 = peg$literalExpectation(\"mi9\", false);\n const peg$c1790 = \"ma9\";\n const peg$c1791 = peg$literalExpectation(\"ma9\", false);\n const peg$c1792 = \"+11\";\n const peg$c1793 = peg$literalExpectation(\"+11\", false);\n const peg$c1794 = \"M11\";\n const peg$c1795 = peg$literalExpectation(\"M11\", false);\n const peg$c1796 = \"+13\";\n const peg$c1797 = peg$literalExpectation(\"+13\", false);\n const peg$c1798 = \"M13\";\n const peg$c1799 = peg$literalExpectation(\"M13\", false);\n const peg$c1800 = \"ma6\";\n const peg$c1801 = peg$literalExpectation(\"ma6\", false);\n const peg$c1802 = \"ma7\";\n const peg$c1803 = peg$literalExpectation(\"ma7\", false);\n const peg$c1804 = \"sus\";\n const peg$c1805 = peg$literalExpectation(\"sus\", false);\n const peg$c1806 = \"#4\";\n const peg$c1807 = peg$literalExpectation(\"#4\", false);\n const peg$c1808 = \"+4\";\n const peg$c1809 = peg$literalExpectation(\"+4\", false);\n const peg$c1810 = \"-5\";\n const peg$c1811 = peg$literalExpectation(\"-5\", false);\n const peg$c1812 = \"b5\";\n const peg$c1813 = peg$literalExpectation(\"b5\", false);\n const peg$c1814 = \"ma\";\n const peg$c1815 = peg$literalExpectation(\"ma\", false);\n const peg$c1816 = \"Ma\";\n const peg$c1817 = peg$literalExpectation(\"Ma\", false);\n const peg$c1818 = \"#5\";\n const peg$c1819 = peg$literalExpectation(\"#5\", false);\n const peg$c1820 = \"+5\";\n const peg$c1821 = peg$literalExpectation(\"+5\", false);\n const peg$c1822 = \"11\";\n const peg$c1823 = peg$literalExpectation(\"11\", false);\n const peg$c1824 = \"13\";\n const peg$c1825 = peg$literalExpectation(\"13\", false);\n const peg$c1826 = \"42\";\n const peg$c1827 = peg$literalExpectation(\"42\", false);\n const peg$c1828 = \"69\";\n const peg$c1829 = peg$literalExpectation(\"69\", false);\n const peg$c1830 = \"x7\";\n const peg$c1831 = peg$literalExpectation(\"x7\", false);\n const peg$c1832 = \"x9\";\n const peg$c1833 = peg$literalExpectation(\"x9\", false);\n const peg$c1834 = \"o7\";\n const peg$c1835 = peg$literalExpectation(\"o7\", false);\n const peg$c1836 = peg$literalExpectation(\"mi\", false);\n const peg$c1837 = \"m2\";\n const peg$c1838 = peg$literalExpectation(\"m2\", false);\n const peg$c1839 = \"m4\";\n const peg$c1840 = peg$literalExpectation(\"m4\", false);\n const peg$c1841 = \"m6\";\n const peg$c1842 = peg$literalExpectation(\"m6\", false);\n const peg$c1843 = \"-6\";\n const peg$c1844 = peg$literalExpectation(\"-6\", false);\n const peg$c1845 = \"m7\";\n const peg$c1846 = peg$literalExpectation(\"m7\", false);\n const peg$c1847 = \"-7\";\n const peg$c1848 = peg$literalExpectation(\"-7\", false);\n const peg$c1849 = \"m9\";\n const peg$c1850 = peg$literalExpectation(\"m9\", false);\n const peg$c1851 = \"-9\";\n const peg$c1852 = peg$literalExpectation(\"-9\", false);\n const peg$c1853 = \"+7\";\n const peg$c1854 = peg$literalExpectation(\"+7\", false);\n const peg$c1855 = \"#7\";\n const peg$c1856 = peg$literalExpectation(\"#7\", false);\n const peg$c1857 = \"M7\";\n const peg$c1858 = peg$literalExpectation(\"M7\", false);\n const peg$c1859 = \"+9\";\n const peg$c1860 = peg$literalExpectation(\"+9\", false);\n const peg$c1861 = \"M9\";\n const peg$c1862 = peg$literalExpectation(\"M9\", false);\n const peg$c1863 = /^[+\\-24-79Mmx]/;\n const peg$c1864 = peg$classExpectation([\n \"+\",\n \"-\",\n \"2\",\n [\n \"4\",\n \"7\"\n ],\n \"9\",\n \"M\",\n \"m\",\n \"x\"\n ], false, false);\n const peg$c1865 = peg$otherExpectation(\"optional whitespace\");\n const peg$c1866 = /^[ \\t\\n\\r]/;\n const peg$c1867 = peg$classExpectation([\n \" \",\n \"\\t\",\n \"\\n\",\n \"\\r\"\n ], false, false);\n const peg$c1868 = peg$otherExpectation(\"space\");\n const peg$c1869 = /^[\\n\\r]/;\n const peg$c1870 = peg$classExpectation([\n \"\\n\",\n \"\\r\"\n ], false, false);\n const peg$c1871 = \"\\n\";\n const peg$c1872 = peg$literalExpectation(\"\\n\", false);\n const peg$c1873 = \"\\r\";\n const peg$c1874 = peg$literalExpectation(\"\\r\", false);\n const peg$c1875 = \"\\\\\";\n const peg$c1876 = peg$literalExpectation(\"\\\\\", false);\n let peg$currPos = 0;\n let peg$savedPos = 0;\n const peg$posDetailsCache = [\n {\n line: 1,\n column: 1\n }\n ];\n let peg$maxFailPos = 0;\n let peg$maxFailExpected = [];\n let peg$silentFails = 0;\n let peg$result;\n if (options.startRule !== undefined) {\n if (!(options.startRule in peg$startRuleFunctions)) throw new Error(\"Can't start parsing from rule \\\"\" + options.startRule + \"\\\".\");\n peg$startRuleFunction = peg$startRuleFunctions[options.startRule];\n }\n function text() {\n return input.substring(peg$savedPos, peg$currPos);\n }\n function location() {\n return peg$computeLocation(peg$savedPos, peg$currPos);\n }\n function expected(description, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildStructuredError([\n peg$otherExpectation(description)\n ], input.substring(peg$savedPos, peg$currPos), location1);\n }\n function error(message, location1) {\n location1 = location1 !== undefined ? location1 : peg$computeLocation(peg$savedPos, peg$currPos);\n throw peg$buildSimpleError(message, location1);\n }\n function peg$literalExpectation(text1, ignoreCase) {\n return {\n type: \"literal\",\n text: text1,\n ignoreCase: ignoreCase\n };\n }\n function peg$classExpectation(parts, inverted, ignoreCase) {\n return {\n type: \"class\",\n parts: parts,\n inverted: inverted,\n ignoreCase: ignoreCase\n };\n }\n function peg$anyExpectation() {\n return {\n type: \"any\"\n };\n }\n function peg$endExpectation() {\n return {\n type: \"end\"\n };\n }\n function peg$otherExpectation(description) {\n return {\n type: \"other\",\n description: description\n };\n }\n function peg$computePosDetails(pos) {\n let details = peg$posDetailsCache[pos];\n let p;\n if (details) return details;\n else {\n p = pos - 1;\n while(!peg$posDetailsCache[p])p--;\n details = peg$posDetailsCache[p];\n details = {\n line: details.line,\n column: details.column\n };\n while(p < pos){\n if (input.charCodeAt(p) === 10) {\n details.line++;\n details.column = 1;\n } else details.column++;\n p++;\n }\n peg$posDetailsCache[pos] = details;\n return details;\n }\n }\n function peg$computeLocation(startPos, endPos) {\n const startPosDetails = peg$computePosDetails(startPos);\n const endPosDetails = peg$computePosDetails(endPos);\n return {\n source: peg$source,\n start: {\n offset: startPos,\n line: startPosDetails.line,\n column: startPosDetails.column\n },\n end: {\n offset: endPos,\n line: endPosDetails.line,\n column: endPosDetails.column\n }\n };\n }\n function peg$fail(expected1) {\n if (peg$currPos < peg$maxFailPos) return;\n if (peg$currPos > peg$maxFailPos) {\n peg$maxFailPos = peg$currPos;\n peg$maxFailExpected = [];\n }\n peg$maxFailExpected.push(expected1);\n }\n function peg$buildSimpleError(message, location1) {\n return new $f22c8d9a47c38bea$export$628c65c376ead699(message, [], \"\", location1);\n }\n function peg$buildStructuredError(expected1, found, location1) {\n return new $f22c8d9a47c38bea$export$628c65c376ead699($f22c8d9a47c38bea$export$628c65c376ead699.buildMessage(expected1, found), expected1, found, location1);\n }\n function peg$parseChordSheet() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseMetadata();\n if (s1 === peg$FAILED) s1 = null;\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordSheetContents();\n if (s2 === peg$FAILED) s2 = null;\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c0(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordSheetContents() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parseNewLine();\n if (s1 === peg$FAILED) s1 = null;\n if (s1 !== peg$FAILED) {\n s2 = [];\n s3 = peg$parseChordSheetLineWithNewLine();\n while(s3 !== peg$FAILED){\n s2.push(s3);\n s3 = peg$parseChordSheetLineWithNewLine();\n }\n if (s2 !== peg$FAILED) {\n s3 = peg$parseChordSheetLine();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c1(s1, s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordSheetLineWithNewLine() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseChordSheetLine();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNewLine();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c2(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordSheetLine() {\n let s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parseDirectionLine();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c3(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseInlineMetadata();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c3(s1);\n }\n s0 = s1;\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$currPos;\n peg$silentFails++;\n s2 = peg$currPos;\n s3 = peg$parseChordsLine();\n if (s3 !== peg$FAILED) {\n s4 = peg$currPos;\n peg$silentFails++;\n s5 = peg$parseWordChar();\n peg$silentFails--;\n if (s5 === peg$FAILED) s4 = undefined;\n else {\n peg$currPos = s4;\n s4 = peg$FAILED;\n }\n if (s4 !== peg$FAILED) {\n s3 = [\n s3,\n s4\n ];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n peg$silentFails--;\n if (s2 !== peg$FAILED) {\n peg$currPos = s1;\n s1 = undefined;\n } else s1 = peg$FAILED;\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordsLine();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c3(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseLyricsLine();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c3(s1);\n }\n s0 = s1;\n }\n }\n }\n return s0;\n }\n function peg$parseSingleChordsLine() {\n let s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n s1 = peg$parseChordsLine();\n if (s1 !== peg$FAILED) {\n s2 = peg$currPos;\n peg$silentFails++;\n s3 = peg$currPos;\n s4 = peg$parseNewLine();\n if (s4 !== peg$FAILED) {\n s5 = peg$parseChordsLine();\n if (s5 !== peg$FAILED) {\n s4 = [\n s4,\n s5\n ];\n s3 = s4;\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n } else {\n peg$currPos = s3;\n s3 = peg$FAILED;\n }\n peg$silentFails--;\n if (s3 !== peg$FAILED) {\n peg$currPos = s2;\n s2 = undefined;\n } else s2 = peg$FAILED;\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c4(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordsLine() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseChordWithSpacing();\n if (s2 === peg$FAILED) s2 = peg$parseRhythmSymbolWithSpacing();\n if (s2 !== peg$FAILED) while(s2 !== peg$FAILED){\n s1.push(s2);\n s2 = peg$parseChordWithSpacing();\n if (s2 === peg$FAILED) s2 = peg$parseRhythmSymbolWithSpacing();\n }\n else s1 = peg$FAILED;\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c5(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseRhythmSymbolWithSpacing() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parse_S_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseRhythmSymbol();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_S_();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c6(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseRhythmSymbol() {\n let s0, s1;\n s0 = peg$currPos;\n if (peg$c7.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c8);\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c9(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseLyricsLine() {\n let s0, s1;\n s0 = peg$currPos;\n s1 = peg$parseLyrics();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c10(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseLyrics() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseWordChar();\n while(s2 !== peg$FAILED){\n s1.push(s2);\n s2 = peg$parseWordChar();\n }\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseNonEmptyLyrics() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseWordChar();\n if (s2 !== peg$FAILED) while(s2 !== peg$FAILED){\n s1.push(s2);\n s2 = peg$parseWordChar();\n }\n else s1 = peg$FAILED;\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n return s0;\n }\n function peg$parseChordWithSpacing() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = peg$parse_S_();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChord();\n if (s2 !== peg$FAILED) {\n s3 = peg$parse_S_();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c11(s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseDirectionLine() {\n let s0, s1, s2, s3, s4, s5, s6, s7;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$currPos;\n s3 = peg$parse_S_();\n if (s3 !== peg$FAILED) {\n s4 = peg$parseKeyword();\n if (s4 !== peg$FAILED) {\n s5 = peg$parse_S_();\n if (s5 !== peg$FAILED) {\n s6 = [];\n s7 = peg$parseWordChar();\n while(s7 !== peg$FAILED){\n s6.push(s7);\n s7 = peg$parseWordChar();\n }\n if (s6 !== peg$FAILED) {\n s7 = peg$parse_S_();\n if (s7 !== peg$FAILED) {\n s3 = [\n s3,\n s4,\n s5,\n s6,\n s7\n ];\n s2 = s3;\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n } else {\n peg$currPos = s2;\n s2 = peg$FAILED;\n }\n if (s2 !== peg$FAILED) s1 = input.substring(s1, peg$currPos);\n else s1 = s2;\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c12(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseKeyword() {\n let s0;\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c13) {\n s0 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c14);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6).toLowerCase() === peg$c15) {\n s0 = input.substr(peg$currPos, 6);\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c16);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6).toLowerCase() === peg$c17) {\n s0 = input.substr(peg$currPos, 6);\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c18);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3).toLowerCase() === peg$c19) {\n s0 = input.substr(peg$currPos, 3);\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c20);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9).toLowerCase() === peg$c21) {\n s0 = input.substr(peg$currPos, 9);\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c22);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 12).toLowerCase() === peg$c23) {\n s0 = input.substr(peg$currPos, 12);\n peg$currPos += 12;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c24);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5).toLowerCase() === peg$c25) {\n s0 = input.substr(peg$currPos, 5);\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c26);\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseWordChar() {\n let s0;\n if (peg$c27.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c28);\n }\n return s0;\n }\n function peg$parseMetadata() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n s1 = [];\n s2 = peg$parseMetadataPairWithNewLine();\n while(s2 !== peg$FAILED){\n s1.push(s2);\n s2 = peg$parseMetadataPairWithNewLine();\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseMetadataPair();\n if (s2 === peg$FAILED) s2 = null;\n if (s2 !== peg$FAILED) {\n s3 = peg$parseMetadataSeparator();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c29(s1, s2);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseInlineMetadata() {\n let s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseMetadataKey();\n if (s2 !== peg$FAILED) s1 = input.substring(s1, peg$currPos);\n else s1 = s2;\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_S_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseColon();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_S_();\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n s6 = peg$parseMetadataValue();\n if (s6 !== peg$FAILED) s5 = input.substring(s5, peg$currPos);\n else s5 = s6;\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c30(s1, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseMetadataPairWithNewLine() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseMetadataPair();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNewLine();\n if (s2 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c31(s1);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseMetadataPair() {\n let s0;\n s0 = peg$parseMetadataPairWithBrackets();\n if (s0 === peg$FAILED) s0 = peg$parseMetadataPairWithoutBrackets();\n return s0;\n }\n function peg$parseMetadataPairWithBrackets() {\n let s0, s1, s2, s3, s4, s5;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 123) {\n s1 = peg$c32;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c33);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_S_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseMetadataPairWithoutBrackets();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_S_();\n if (s4 !== peg$FAILED) {\n if (input.charCodeAt(peg$currPos) === 125) {\n s5 = peg$c34;\n peg$currPos++;\n } else {\n s5 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c35);\n }\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c36(s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseMetadataPairWithoutBrackets() {\n let s0, s1, s2, s3, s4, s5, s6;\n s0 = peg$currPos;\n s1 = peg$currPos;\n s2 = peg$parseMetadataKey();\n if (s2 !== peg$FAILED) s1 = input.substring(s1, peg$currPos);\n else s1 = s2;\n if (s1 !== peg$FAILED) {\n s2 = peg$parse_S_();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseColon();\n if (s3 !== peg$FAILED) {\n s4 = peg$parse_S_();\n if (s4 !== peg$FAILED) {\n s5 = peg$currPos;\n s6 = peg$parseMetadataValue();\n if (s6 !== peg$FAILED) s5 = input.substring(s5, peg$currPos);\n else s5 = s6;\n if (s5 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c37(s1, s5);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseColon() {\n let s0;\n if (input.charCodeAt(peg$currPos) === 58) {\n s0 = peg$c38;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c39);\n }\n return s0;\n }\n function peg$parseMetadataKey() {\n let s0, s1;\n s0 = [];\n if (peg$c40.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c41);\n }\n if (s1 !== peg$FAILED) while(s1 !== peg$FAILED){\n s0.push(s1);\n if (peg$c40.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c41);\n }\n }\n else s0 = peg$FAILED;\n return s0;\n }\n function peg$parseMetadataValue() {\n let s0, s1;\n s0 = [];\n if (peg$c42.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c43);\n }\n if (s1 !== peg$FAILED) while(s1 !== peg$FAILED){\n s0.push(s1);\n if (peg$c42.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c43);\n }\n }\n else s0 = peg$FAILED;\n return s0;\n }\n function peg$parseMetadataSeparator() {\n let s0, s1, s2;\n s0 = peg$currPos;\n if (input.substr(peg$currPos, 3) === peg$c44) {\n s1 = peg$c44;\n peg$currPos += 3;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c45);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNewLine();\n if (s2 !== peg$FAILED) {\n s1 = [\n s1,\n s2\n ];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parse_S_() {\n let s0, s1;\n peg$silentFails++;\n s0 = [];\n if (peg$c47.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c48);\n }\n while(s1 !== peg$FAILED){\n s0.push(s1);\n if (peg$c47.test(input.charAt(peg$currPos))) {\n s1 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c48);\n }\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c46);\n }\n return s0;\n }\n function peg$parseChord() {\n let s0, s1;\n s0 = peg$currPos;\n s1 = peg$parseNumeral();\n if (s1 === peg$FAILED) {\n s1 = peg$parseNumeric();\n if (s1 === peg$FAILED) {\n s1 = peg$parseChordSolfege();\n if (s1 === peg$FAILED) s1 = peg$parseChordSymbol();\n }\n }\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c49(s1);\n }\n s0 = s1;\n return s0;\n }\n function peg$parseChordModifier() {\n let s0;\n if (peg$c50.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c51);\n }\n return s0;\n }\n function peg$parseChordSymbol() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parseChordSymbolRoot();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordModifier();\n if (s2 === peg$FAILED) s2 = null;\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = peg$parseChordSuffix();\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseChordSymbolBass();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c52(s1, s2, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseChordSymbolBass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c53(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseChordSymbolRoot() {\n let s0;\n if (peg$c54.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c55);\n }\n return s0;\n }\n function peg$parseChordSymbolBass() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c56;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c57);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordSymbolRoot();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseChordModifier();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c58(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordSolfege() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parseChordSolfegeRoot();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordModifier();\n if (s2 === peg$FAILED) s2 = null;\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = peg$parseChordSuffix();\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseChordSolfegeBass();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c59(s1, s2, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseChordSolfegeBass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c60(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseChordSolfegeRoot() {\n let s0;\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c61) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c62);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c63) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c64);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c65) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c66);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c67) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c68);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3).toLowerCase() === peg$c69) {\n s0 = input.substr(peg$currPos, 3);\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c70);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c71) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c72);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c73) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c74);\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseChordSolfegeBass() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c56;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c57);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordSolfegeRoot();\n if (s2 !== peg$FAILED) {\n s3 = peg$parseChordModifier();\n if (s3 === peg$FAILED) s3 = null;\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c58(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseNumeral() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parseChordModifier();\n if (s1 === peg$FAILED) s1 = null;\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNumeralRoot();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = peg$parseChordSuffix();\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseNumeralBass();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c75(s1, s2, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseNumeralBass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c76(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseNumeralRoot() {\n let s0;\n if (input.substr(peg$currPos, 3).toLowerCase() === peg$c77) {\n s0 = input.substr(peg$currPos, 3);\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c78);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3).toLowerCase() === peg$c79) {\n s0 = input.substr(peg$currPos, 3);\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c80);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c81) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c82);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c83) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c84);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2).toLowerCase() === peg$c85) {\n s0 = input.substr(peg$currPos, 2);\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c86);\n }\n if (s0 === peg$FAILED) {\n if (peg$c87.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c88);\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseNumeralBass() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c56;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c57);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordModifier();\n if (s2 === peg$FAILED) s2 = null;\n if (s2 !== peg$FAILED) {\n s3 = peg$parseNumeralRoot();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c89(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseNumeric() {\n let s0, s1, s2, s3, s4;\n s0 = peg$currPos;\n s1 = peg$parseChordModifier();\n if (s1 === peg$FAILED) s1 = null;\n if (s1 !== peg$FAILED) {\n s2 = peg$parseNumericRoot();\n if (s2 !== peg$FAILED) {\n s3 = peg$currPos;\n s4 = peg$parseChordSuffix();\n if (s4 !== peg$FAILED) s3 = input.substring(s3, peg$currPos);\n else s3 = s4;\n if (s3 !== peg$FAILED) {\n s4 = peg$parseNumericBass();\n if (s4 === peg$FAILED) s4 = null;\n if (s4 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c90(s1, s2, s3, s4);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n if (s0 === peg$FAILED) {\n s0 = peg$currPos;\n s1 = peg$parseNumericBass();\n if (s1 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c91(s1);\n }\n s0 = s1;\n }\n return s0;\n }\n function peg$parseNumericRoot() {\n let s0;\n if (peg$c92.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c93);\n }\n return s0;\n }\n function peg$parseNumericBass() {\n let s0, s1, s2, s3;\n s0 = peg$currPos;\n if (input.charCodeAt(peg$currPos) === 47) {\n s1 = peg$c56;\n peg$currPos++;\n } else {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c57);\n }\n if (s1 !== peg$FAILED) {\n s2 = peg$parseChordModifier();\n if (s2 === peg$FAILED) s2 = null;\n if (s2 !== peg$FAILED) {\n s3 = peg$parseNumericRoot();\n if (s3 !== peg$FAILED) {\n peg$savedPos = s0;\n s1 = peg$c89(s2, s3);\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseChordSuffix() {\n let s0;\n s0 = peg$parseChordSuffix0();\n if (s0 === peg$FAILED) {\n s0 = peg$parseChordSuffix1();\n if (s0 === peg$FAILED) {\n s0 = peg$parseChordSuffix2();\n if (s0 === peg$FAILED) {\n s0 = peg$parseChordSuffix3();\n if (s0 === peg$FAILED) {\n s0 = peg$parseChordSuffix4();\n if (s0 === peg$FAILED) {\n s0 = peg$parseChordSuffix5();\n if (s0 === peg$FAILED) {\n s0 = peg$parseChordSuffix6();\n if (s0 === peg$FAILED) {\n s0 = peg$parseChordSuffix7();\n if (s0 === peg$FAILED) {\n s0 = peg$parseChordSuffix8();\n if (s0 === peg$FAILED) s0 = peg$parseChordSuffix9();\n }\n }\n }\n }\n }\n }\n }\n }\n if (s0 === peg$FAILED) s0 = null;\n return s0;\n }\n function peg$parseChordSuffix0() {\n let s0;\n if (input.substr(peg$currPos, 15) === peg$c94) {\n s0 = peg$c94;\n peg$currPos += 15;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c95);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 12) === peg$c96) {\n s0 = peg$c96;\n peg$currPos += 12;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c97);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 12) === peg$c98) {\n s0 = peg$c98;\n peg$currPos += 12;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c99);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c100) {\n s0 = peg$c100;\n peg$currPos += 11;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c101);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c102) {\n s0 = peg$c102;\n peg$currPos += 11;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c103);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c104) {\n s0 = peg$c104;\n peg$currPos += 11;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c105);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c106) {\n s0 = peg$c106;\n peg$currPos += 11;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c107);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c108) {\n s0 = peg$c108;\n peg$currPos += 11;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c109);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c110) {\n s0 = peg$c110;\n peg$currPos += 11;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c111);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c112) {\n s0 = peg$c112;\n peg$currPos += 11;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c113);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c114) {\n s0 = peg$c114;\n peg$currPos += 11;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c115);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c116) {\n s0 = peg$c116;\n peg$currPos += 11;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c117);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 11) === peg$c118) {\n s0 = peg$c118;\n peg$currPos += 11;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c119);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c120) {\n s0 = peg$c120;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c121);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c122) {\n s0 = peg$c122;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c123);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c124) {\n s0 = peg$c124;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c125);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c126) {\n s0 = peg$c126;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c127);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c128) {\n s0 = peg$c128;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c129);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c130) {\n s0 = peg$c130;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c131);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c132) {\n s0 = peg$c132;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c133);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c134) {\n s0 = peg$c134;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c135);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c136) {\n s0 = peg$c136;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c137);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c138) {\n s0 = peg$c138;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c139);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c140) {\n s0 = peg$c140;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c141);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c142) {\n s0 = peg$c142;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c143);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c144) {\n s0 = peg$c144;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c145);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c146) {\n s0 = peg$c146;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c147);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c148) {\n s0 = peg$c148;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c149);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c150) {\n s0 = peg$c150;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c151);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c152) {\n s0 = peg$c152;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c153);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c154) {\n s0 = peg$c154;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c155);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c156) {\n s0 = peg$c156;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c157);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c158) {\n s0 = peg$c158;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c159);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c160) {\n s0 = peg$c160;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c161);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c162) {\n s0 = peg$c162;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c163);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c164) {\n s0 = peg$c164;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c165);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c166) {\n s0 = peg$c166;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c167);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c168) {\n s0 = peg$c168;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c169);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c170) {\n s0 = peg$c170;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c171);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c172) {\n s0 = peg$c172;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c173);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c174) {\n s0 = peg$c174;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c175);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c176) {\n s0 = peg$c176;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c177);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c178) {\n s0 = peg$c178;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c179);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c180) {\n s0 = peg$c180;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c181);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c182) {\n s0 = peg$c182;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c183);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c184) {\n s0 = peg$c184;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c185);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 10) === peg$c186) {\n s0 = peg$c186;\n peg$currPos += 10;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c187);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c188) {\n s0 = peg$c188;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c189);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c190) {\n s0 = peg$c190;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c191);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c192) {\n s0 = peg$c192;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c193);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c194) {\n s0 = peg$c194;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c195);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c196) {\n s0 = peg$c196;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c197);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c198) {\n s0 = peg$c198;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c199);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c200) {\n s0 = peg$c200;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c201);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c202) {\n s0 = peg$c202;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c203);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c204) {\n s0 = peg$c204;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c205);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c206) {\n s0 = peg$c206;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c207);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c208) {\n s0 = peg$c208;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c209);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c210) {\n s0 = peg$c210;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c211);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c212) {\n s0 = peg$c212;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c213);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c214) {\n s0 = peg$c214;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c215);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c216) {\n s0 = peg$c216;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c217);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c218) {\n s0 = peg$c218;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c219);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c220) {\n s0 = peg$c220;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c221);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c222) {\n s0 = peg$c222;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c223);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c224) {\n s0 = peg$c224;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c225);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c226) {\n s0 = peg$c226;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c227);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c228) {\n s0 = peg$c228;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c229);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c230) {\n s0 = peg$c230;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c231);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c232) {\n s0 = peg$c232;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c233);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c234) {\n s0 = peg$c234;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c235);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c236) {\n s0 = peg$c236;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c237);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c238) {\n s0 = peg$c238;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c239);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c240) {\n s0 = peg$c240;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c241);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c242) {\n s0 = peg$c242;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c243);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c244) {\n s0 = peg$c244;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c245);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c246) {\n s0 = peg$c246;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c247);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c248) {\n s0 = peg$c248;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c249);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c250) {\n s0 = peg$c250;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c251);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c252) {\n s0 = peg$c252;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c253);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c254) {\n s0 = peg$c254;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c255);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c256) {\n s0 = peg$c256;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c257);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c258) {\n s0 = peg$c258;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c259);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c260) {\n s0 = peg$c260;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c261);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c262) {\n s0 = peg$c262;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c263);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c264) {\n s0 = peg$c264;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c265);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c266) {\n s0 = peg$c266;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c267);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c268) {\n s0 = peg$c268;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c269);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c270) {\n s0 = peg$c270;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c271);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c272) {\n s0 = peg$c272;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c273);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c274) {\n s0 = peg$c274;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c275);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c276) {\n s0 = peg$c276;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c277);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c278) {\n s0 = peg$c278;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c279);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c280) {\n s0 = peg$c280;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c281);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c282) {\n s0 = peg$c282;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c283);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c284) {\n s0 = peg$c284;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c285);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c286) {\n s0 = peg$c286;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c287);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c288) {\n s0 = peg$c288;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c289);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c290) {\n s0 = peg$c290;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c291);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c292) {\n s0 = peg$c292;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c293);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseChordSuffix1() {\n let s0;\n if (input.substr(peg$currPos, 9) === peg$c294) {\n s0 = peg$c294;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c295);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c296) {\n s0 = peg$c296;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c297);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c298) {\n s0 = peg$c298;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c299);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c300) {\n s0 = peg$c300;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c301);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c302) {\n s0 = peg$c302;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c303);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c304) {\n s0 = peg$c304;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c305);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c306) {\n s0 = peg$c306;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c307);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c308) {\n s0 = peg$c308;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c309);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c310) {\n s0 = peg$c310;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c311);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c312) {\n s0 = peg$c312;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c313);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c314) {\n s0 = peg$c314;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c315);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c316) {\n s0 = peg$c316;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c317);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c318) {\n s0 = peg$c318;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c319);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c320) {\n s0 = peg$c320;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c321);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c322) {\n s0 = peg$c322;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c323);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 9) === peg$c324) {\n s0 = peg$c324;\n peg$currPos += 9;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c325);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c326) {\n s0 = peg$c326;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c327);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c328) {\n s0 = peg$c328;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c329);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c330) {\n s0 = peg$c330;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c331);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c332) {\n s0 = peg$c332;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c333);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c334) {\n s0 = peg$c334;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c335);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c336) {\n s0 = peg$c336;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c337);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c338) {\n s0 = peg$c338;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c339);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c340) {\n s0 = peg$c340;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c341);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c342) {\n s0 = peg$c342;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c343);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c344) {\n s0 = peg$c344;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c345);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c346) {\n s0 = peg$c346;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c347);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c348) {\n s0 = peg$c348;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c349);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c350) {\n s0 = peg$c350;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c351);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c352) {\n s0 = peg$c352;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c353);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c354) {\n s0 = peg$c354;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c355);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c356) {\n s0 = peg$c356;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c357);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c358) {\n s0 = peg$c358;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c359);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c360) {\n s0 = peg$c360;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c361);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c362) {\n s0 = peg$c362;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c363);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c364) {\n s0 = peg$c364;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c365);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c366) {\n s0 = peg$c366;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c367);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c368) {\n s0 = peg$c368;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c369);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c370) {\n s0 = peg$c370;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c371);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c372) {\n s0 = peg$c372;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c373);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c374) {\n s0 = peg$c374;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c375);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c376) {\n s0 = peg$c376;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c377);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c378) {\n s0 = peg$c378;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c379);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c380) {\n s0 = peg$c380;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c381);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c382) {\n s0 = peg$c382;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c383);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c384) {\n s0 = peg$c384;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c385);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c386) {\n s0 = peg$c386;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c387);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c388) {\n s0 = peg$c388;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c389);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c390) {\n s0 = peg$c390;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c391);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c392) {\n s0 = peg$c392;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c393);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c394) {\n s0 = peg$c394;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c395);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c396) {\n s0 = peg$c396;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c397);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c398) {\n s0 = peg$c398;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c399);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c400) {\n s0 = peg$c400;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c401);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c402) {\n s0 = peg$c402;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c403);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c404) {\n s0 = peg$c404;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c405);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c406) {\n s0 = peg$c406;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c407);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c408) {\n s0 = peg$c408;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c409);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c410) {\n s0 = peg$c410;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c411);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c412) {\n s0 = peg$c412;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c413);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c414) {\n s0 = peg$c414;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c415);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c416) {\n s0 = peg$c416;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c417);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c418) {\n s0 = peg$c418;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c419);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c420) {\n s0 = peg$c420;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c421);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c422) {\n s0 = peg$c422;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c423);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c424) {\n s0 = peg$c424;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c425);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c426) {\n s0 = peg$c426;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c427);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c428) {\n s0 = peg$c428;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c429);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c430) {\n s0 = peg$c430;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c431);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c432) {\n s0 = peg$c432;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c433);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c434) {\n s0 = peg$c434;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c435);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c436) {\n s0 = peg$c436;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c437);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c436) {\n s0 = peg$c436;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c437);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c438) {\n s0 = peg$c438;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c439);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c440) {\n s0 = peg$c440;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c441);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c442) {\n s0 = peg$c442;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c443);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c444) {\n s0 = peg$c444;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c445);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c446) {\n s0 = peg$c446;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c447);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c448) {\n s0 = peg$c448;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c449);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c450) {\n s0 = peg$c450;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c451);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c452) {\n s0 = peg$c452;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c453);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c454) {\n s0 = peg$c454;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c455);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c456) {\n s0 = peg$c456;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c457);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c458) {\n s0 = peg$c458;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c459);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c460) {\n s0 = peg$c460;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c461);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c462) {\n s0 = peg$c462;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c463);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c464) {\n s0 = peg$c464;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c465);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c466) {\n s0 = peg$c466;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c467);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c468) {\n s0 = peg$c468;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c469);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c470) {\n s0 = peg$c470;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c471);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c472) {\n s0 = peg$c472;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c473);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c474) {\n s0 = peg$c474;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c475);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c476) {\n s0 = peg$c476;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c477);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c478) {\n s0 = peg$c478;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c479);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c480) {\n s0 = peg$c480;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c481);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c482) {\n s0 = peg$c482;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c483);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c484) {\n s0 = peg$c484;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c485);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c486) {\n s0 = peg$c486;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c487);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c488) {\n s0 = peg$c488;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c489);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c490) {\n s0 = peg$c490;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c491);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseChordSuffix2() {\n let s0;\n if (input.substr(peg$currPos, 8) === peg$c492) {\n s0 = peg$c492;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c493);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c494) {\n s0 = peg$c494;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c495);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c496) {\n s0 = peg$c496;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c497);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c498) {\n s0 = peg$c498;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c499);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c500) {\n s0 = peg$c500;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c501);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c502) {\n s0 = peg$c502;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c503);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c504) {\n s0 = peg$c504;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c505);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c506) {\n s0 = peg$c506;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c507);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c508) {\n s0 = peg$c508;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c509);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c510) {\n s0 = peg$c510;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c511);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c512) {\n s0 = peg$c512;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c513);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c514) {\n s0 = peg$c514;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c515);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c516) {\n s0 = peg$c516;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c517);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c518) {\n s0 = peg$c518;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c519);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c520) {\n s0 = peg$c520;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c521);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c522) {\n s0 = peg$c522;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c523);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c524) {\n s0 = peg$c524;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c525);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c526) {\n s0 = peg$c526;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c527);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c528) {\n s0 = peg$c528;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c529);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c476) {\n s0 = peg$c476;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c477);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c530) {\n s0 = peg$c530;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c531);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c532) {\n s0 = peg$c532;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c533);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c534) {\n s0 = peg$c534;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c535);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c536) {\n s0 = peg$c536;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c537);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c538) {\n s0 = peg$c538;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c539);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c540) {\n s0 = peg$c540;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c541);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c542) {\n s0 = peg$c542;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c543);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c544) {\n s0 = peg$c544;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c545);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c546) {\n s0 = peg$c546;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c547);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 8) === peg$c548) {\n s0 = peg$c548;\n peg$currPos += 8;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c549);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c550) {\n s0 = peg$c550;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c551);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c552) {\n s0 = peg$c552;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c553);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c554) {\n s0 = peg$c554;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c555);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c556) {\n s0 = peg$c556;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c557);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c558) {\n s0 = peg$c558;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c559);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c560) {\n s0 = peg$c560;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c561);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c562) {\n s0 = peg$c562;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c563);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c564) {\n s0 = peg$c564;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c565);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c566) {\n s0 = peg$c566;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c567);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c568) {\n s0 = peg$c568;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c569);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c570) {\n s0 = peg$c570;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c571);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c572) {\n s0 = peg$c572;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c573);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c574) {\n s0 = peg$c574;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c575);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c576) {\n s0 = peg$c576;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c577);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c578) {\n s0 = peg$c578;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c579);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c580) {\n s0 = peg$c580;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c581);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c582) {\n s0 = peg$c582;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c583);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c584) {\n s0 = peg$c584;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c585);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c586) {\n s0 = peg$c586;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c587);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c588) {\n s0 = peg$c588;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c589);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c590) {\n s0 = peg$c590;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c591);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c592) {\n s0 = peg$c592;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c593);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c594) {\n s0 = peg$c594;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c595);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c596) {\n s0 = peg$c596;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c597);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c598) {\n s0 = peg$c598;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c599);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c600) {\n s0 = peg$c600;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c601);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c602) {\n s0 = peg$c602;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c603);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c604) {\n s0 = peg$c604;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c605);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c606) {\n s0 = peg$c606;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c607);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c608) {\n s0 = peg$c608;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c609);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c610) {\n s0 = peg$c610;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c611);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c612) {\n s0 = peg$c612;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c613);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c614) {\n s0 = peg$c614;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c615);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c616) {\n s0 = peg$c616;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c617);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c618) {\n s0 = peg$c618;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c619);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c620) {\n s0 = peg$c620;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c621);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c622) {\n s0 = peg$c622;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c623);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c624) {\n s0 = peg$c624;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c625);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c626) {\n s0 = peg$c626;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c627);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c628) {\n s0 = peg$c628;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c629);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c630) {\n s0 = peg$c630;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c631);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c632) {\n s0 = peg$c632;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c633);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c634) {\n s0 = peg$c634;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c635);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c636) {\n s0 = peg$c636;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c637);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c638) {\n s0 = peg$c638;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c639);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c640) {\n s0 = peg$c640;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c641);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c642) {\n s0 = peg$c642;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c643);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c644) {\n s0 = peg$c644;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c645);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c646) {\n s0 = peg$c646;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c647);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c648) {\n s0 = peg$c648;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c649);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c650) {\n s0 = peg$c650;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c651);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c652) {\n s0 = peg$c652;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c653);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c654) {\n s0 = peg$c654;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c655);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c654) {\n s0 = peg$c654;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c655);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c656) {\n s0 = peg$c656;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c657);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c658) {\n s0 = peg$c658;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c659);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c660) {\n s0 = peg$c660;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c661);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c662) {\n s0 = peg$c662;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c663);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c664) {\n s0 = peg$c664;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c665);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c666) {\n s0 = peg$c666;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c667);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c668) {\n s0 = peg$c668;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c669);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c670) {\n s0 = peg$c670;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c671);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c672) {\n s0 = peg$c672;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c673);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c674) {\n s0 = peg$c674;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c675);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c676) {\n s0 = peg$c676;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c677);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c678) {\n s0 = peg$c678;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c679);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c680) {\n s0 = peg$c680;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c681);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c682) {\n s0 = peg$c682;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c683);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c684) {\n s0 = peg$c684;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c685);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c686) {\n s0 = peg$c686;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c687);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseChordSuffix3() {\n let s0;\n if (input.substr(peg$currPos, 7) === peg$c688) {\n s0 = peg$c688;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c689);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c690) {\n s0 = peg$c690;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c691);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c692) {\n s0 = peg$c692;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c693);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c694) {\n s0 = peg$c694;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c695);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c696) {\n s0 = peg$c696;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c697);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c698) {\n s0 = peg$c698;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c699);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c700) {\n s0 = peg$c700;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c701);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c702) {\n s0 = peg$c702;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c703);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c704) {\n s0 = peg$c704;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c705);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c706) {\n s0 = peg$c706;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c707);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c708) {\n s0 = peg$c708;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c709);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c710) {\n s0 = peg$c710;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c711);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c712) {\n s0 = peg$c712;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c713);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c714) {\n s0 = peg$c714;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c715);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c716) {\n s0 = peg$c716;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c717);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c716) {\n s0 = peg$c716;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c717);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c718) {\n s0 = peg$c718;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c719);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c720) {\n s0 = peg$c720;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c721);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c722) {\n s0 = peg$c722;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c723);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c724) {\n s0 = peg$c724;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c725);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c726) {\n s0 = peg$c726;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c727);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c728) {\n s0 = peg$c728;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c729);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c730) {\n s0 = peg$c730;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c731);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c732) {\n s0 = peg$c732;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c733);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c734) {\n s0 = peg$c734;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c735);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c736) {\n s0 = peg$c736;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c737);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c738) {\n s0 = peg$c738;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c739);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c740) {\n s0 = peg$c740;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c741);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c742) {\n s0 = peg$c742;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c743);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c744) {\n s0 = peg$c744;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c745);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c746) {\n s0 = peg$c746;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c747);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c748) {\n s0 = peg$c748;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c749);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c750) {\n s0 = peg$c750;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c751);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c752) {\n s0 = peg$c752;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c753);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c754) {\n s0 = peg$c754;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c755);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c756) {\n s0 = peg$c756;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c757);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c758) {\n s0 = peg$c758;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c759);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c760) {\n s0 = peg$c760;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c761);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c762) {\n s0 = peg$c762;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c763);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c764) {\n s0 = peg$c764;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c765);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c766) {\n s0 = peg$c766;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c767);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c768) {\n s0 = peg$c768;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c769);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c770) {\n s0 = peg$c770;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c771);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c772) {\n s0 = peg$c772;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c773);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c774) {\n s0 = peg$c774;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c775);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c776) {\n s0 = peg$c776;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c777);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c778) {\n s0 = peg$c778;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c779);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c780) {\n s0 = peg$c780;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c781);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c782) {\n s0 = peg$c782;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c783);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c784) {\n s0 = peg$c784;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c785);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c786) {\n s0 = peg$c786;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c787);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c788) {\n s0 = peg$c788;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c789);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c790) {\n s0 = peg$c790;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c791);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c792) {\n s0 = peg$c792;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c793);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c794) {\n s0 = peg$c794;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c795);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c796) {\n s0 = peg$c796;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c797);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c798) {\n s0 = peg$c798;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c799);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c800) {\n s0 = peg$c800;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c801);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c802) {\n s0 = peg$c802;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c803);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c804) {\n s0 = peg$c804;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c805);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c806) {\n s0 = peg$c806;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c807);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c808) {\n s0 = peg$c808;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c809);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c810) {\n s0 = peg$c810;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c811);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c812) {\n s0 = peg$c812;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c813);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c814) {\n s0 = peg$c814;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c815);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c816) {\n s0 = peg$c816;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c817);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c818) {\n s0 = peg$c818;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c819);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c820) {\n s0 = peg$c820;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c821);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c822) {\n s0 = peg$c822;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c823);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c824) {\n s0 = peg$c824;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c825);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c826) {\n s0 = peg$c826;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c827);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c828) {\n s0 = peg$c828;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c829);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c830) {\n s0 = peg$c830;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c831);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c832) {\n s0 = peg$c832;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c833);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c834) {\n s0 = peg$c834;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c835);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c836) {\n s0 = peg$c836;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c837);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c838) {\n s0 = peg$c838;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c839);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c840) {\n s0 = peg$c840;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c841);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c842) {\n s0 = peg$c842;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c843);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c844) {\n s0 = peg$c844;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c845);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c846) {\n s0 = peg$c846;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c847);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c848) {\n s0 = peg$c848;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c849);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c850) {\n s0 = peg$c850;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c851);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c852) {\n s0 = peg$c852;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c853);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c854) {\n s0 = peg$c854;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c855);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c856) {\n s0 = peg$c856;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c857);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c858) {\n s0 = peg$c858;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c859);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c860) {\n s0 = peg$c860;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c861);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c862) {\n s0 = peg$c862;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c863);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c864) {\n s0 = peg$c864;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c865);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c866) {\n s0 = peg$c866;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c867);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c868) {\n s0 = peg$c868;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c869);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c870) {\n s0 = peg$c870;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c871);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c872) {\n s0 = peg$c872;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c873);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c874) {\n s0 = peg$c874;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c875);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c876) {\n s0 = peg$c876;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c877);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c878) {\n s0 = peg$c878;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c879);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c880) {\n s0 = peg$c880;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c881);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c882) {\n s0 = peg$c882;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c883);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c884) {\n s0 = peg$c884;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c885);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseChordSuffix4() {\n let s0;\n if (input.substr(peg$currPos, 7) === peg$c886) {\n s0 = peg$c886;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c887);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c888) {\n s0 = peg$c888;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c889);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c890) {\n s0 = peg$c890;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c891);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 7) === peg$c892) {\n s0 = peg$c892;\n peg$currPos += 7;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c893);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c894) {\n s0 = peg$c894;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c895);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c896) {\n s0 = peg$c896;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c897);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c898) {\n s0 = peg$c898;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c899);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c900) {\n s0 = peg$c900;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c901);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c902) {\n s0 = peg$c902;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c903);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c904) {\n s0 = peg$c904;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c905);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c906) {\n s0 = peg$c906;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c907);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c908) {\n s0 = peg$c908;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c909);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c910) {\n s0 = peg$c910;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c911);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c912) {\n s0 = peg$c912;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c913);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c914) {\n s0 = peg$c914;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c915);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c916) {\n s0 = peg$c916;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c917);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c918) {\n s0 = peg$c918;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c919);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c920) {\n s0 = peg$c920;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c921);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c922) {\n s0 = peg$c922;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c923);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c924) {\n s0 = peg$c924;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c925);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c926) {\n s0 = peg$c926;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c927);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c928) {\n s0 = peg$c928;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c929);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c930) {\n s0 = peg$c930;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c931);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c932) {\n s0 = peg$c932;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c933);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c934) {\n s0 = peg$c934;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c935);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c936) {\n s0 = peg$c936;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c937);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c938) {\n s0 = peg$c938;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c939);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c940) {\n s0 = peg$c940;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c941);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c942) {\n s0 = peg$c942;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c943);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c944) {\n s0 = peg$c944;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c945);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c946) {\n s0 = peg$c946;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c947);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c948) {\n s0 = peg$c948;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c949);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c950) {\n s0 = peg$c950;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c951);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c952) {\n s0 = peg$c952;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c953);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c954) {\n s0 = peg$c954;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c955);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c956) {\n s0 = peg$c956;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c957);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c958) {\n s0 = peg$c958;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c959);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c960) {\n s0 = peg$c960;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c961);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c962) {\n s0 = peg$c962;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c963);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c964) {\n s0 = peg$c964;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c965);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c966) {\n s0 = peg$c966;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c967);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c968) {\n s0 = peg$c968;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c969);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c970) {\n s0 = peg$c970;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c971);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c972) {\n s0 = peg$c972;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c973);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c974) {\n s0 = peg$c974;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c975);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c976) {\n s0 = peg$c976;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c977);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c978) {\n s0 = peg$c978;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c979);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c980) {\n s0 = peg$c980;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c981);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c982) {\n s0 = peg$c982;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c983);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c984) {\n s0 = peg$c984;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c985);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c986) {\n s0 = peg$c986;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c987);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c988) {\n s0 = peg$c988;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c989);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c988) {\n s0 = peg$c988;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c989);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c990) {\n s0 = peg$c990;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c991);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c992) {\n s0 = peg$c992;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c993);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c994) {\n s0 = peg$c994;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c995);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c996) {\n s0 = peg$c996;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c997);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c998) {\n s0 = peg$c998;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c999);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1000) {\n s0 = peg$c1000;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1001);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1002) {\n s0 = peg$c1002;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1003);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1004) {\n s0 = peg$c1004;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1005);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1006) {\n s0 = peg$c1006;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1007);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1008) {\n s0 = peg$c1008;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1009);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1010) {\n s0 = peg$c1010;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1011);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1012) {\n s0 = peg$c1012;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1013);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1014) {\n s0 = peg$c1014;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1015);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1016) {\n s0 = peg$c1016;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1017);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1018) {\n s0 = peg$c1018;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1019);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1020) {\n s0 = peg$c1020;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1021);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1022) {\n s0 = peg$c1022;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1023);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1024) {\n s0 = peg$c1024;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1025);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1026) {\n s0 = peg$c1026;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1027);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1028) {\n s0 = peg$c1028;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1029);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1030) {\n s0 = peg$c1030;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1031);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1032) {\n s0 = peg$c1032;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1033);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1034) {\n s0 = peg$c1034;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1035);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1036) {\n s0 = peg$c1036;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1037);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1038) {\n s0 = peg$c1038;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1039);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1040) {\n s0 = peg$c1040;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1041);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1042) {\n s0 = peg$c1042;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1043);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1044) {\n s0 = peg$c1044;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1045);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1046) {\n s0 = peg$c1046;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1047);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1048) {\n s0 = peg$c1048;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1049);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1050) {\n s0 = peg$c1050;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1051);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1052) {\n s0 = peg$c1052;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1053);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1054) {\n s0 = peg$c1054;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1055);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1056) {\n s0 = peg$c1056;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1057);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1058) {\n s0 = peg$c1058;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1059);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1060) {\n s0 = peg$c1060;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1061);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1062) {\n s0 = peg$c1062;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1063);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1064) {\n s0 = peg$c1064;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1065);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1066) {\n s0 = peg$c1066;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1067);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1068) {\n s0 = peg$c1068;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1069);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1070) {\n s0 = peg$c1070;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1071);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1072) {\n s0 = peg$c1072;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1073);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1074) {\n s0 = peg$c1074;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1075);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1076) {\n s0 = peg$c1076;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1077);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1078) {\n s0 = peg$c1078;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1079);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1080) {\n s0 = peg$c1080;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1081);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1082) {\n s0 = peg$c1082;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1083);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseChordSuffix5() {\n let s0;\n if (input.substr(peg$currPos, 6) === peg$c1084) {\n s0 = peg$c1084;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1085);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1086) {\n s0 = peg$c1086;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1087);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1088) {\n s0 = peg$c1088;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1089);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1090) {\n s0 = peg$c1090;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1091);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1092) {\n s0 = peg$c1092;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1093);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1094) {\n s0 = peg$c1094;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1095);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1096) {\n s0 = peg$c1096;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1097);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1098) {\n s0 = peg$c1098;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1099);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1100) {\n s0 = peg$c1100;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1101);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1102) {\n s0 = peg$c1102;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1103);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1104) {\n s0 = peg$c1104;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1105);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1106) {\n s0 = peg$c1106;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1107);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1108) {\n s0 = peg$c1108;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1109);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1110) {\n s0 = peg$c1110;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1111);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1112) {\n s0 = peg$c1112;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1113);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1114) {\n s0 = peg$c1114;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1115);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1116) {\n s0 = peg$c1116;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1117);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1118) {\n s0 = peg$c1118;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1119);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1120) {\n s0 = peg$c1120;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1121);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1122) {\n s0 = peg$c1122;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1123);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1124) {\n s0 = peg$c1124;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1125);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1126) {\n s0 = peg$c1126;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1127);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1128) {\n s0 = peg$c1128;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1129);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1130) {\n s0 = peg$c1130;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1131);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1132) {\n s0 = peg$c1132;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1133);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1134) {\n s0 = peg$c1134;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1135);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1136) {\n s0 = peg$c1136;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1137);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1138) {\n s0 = peg$c1138;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1139);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1140) {\n s0 = peg$c1140;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1141);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1142) {\n s0 = peg$c1142;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1143);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1144) {\n s0 = peg$c1144;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1145);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1146) {\n s0 = peg$c1146;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1147);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1148) {\n s0 = peg$c1148;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1149);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1150) {\n s0 = peg$c1150;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1151);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1152) {\n s0 = peg$c1152;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1153);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1154) {\n s0 = peg$c1154;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1155);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1156) {\n s0 = peg$c1156;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1157);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1158) {\n s0 = peg$c1158;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1159);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1160) {\n s0 = peg$c1160;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1161);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1162) {\n s0 = peg$c1162;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1163);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1144) {\n s0 = peg$c1144;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1145);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1164) {\n s0 = peg$c1164;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1165);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1166) {\n s0 = peg$c1166;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1167);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1168) {\n s0 = peg$c1168;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1169);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1170) {\n s0 = peg$c1170;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1171);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1172) {\n s0 = peg$c1172;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1173);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1174) {\n s0 = peg$c1174;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1175);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1176) {\n s0 = peg$c1176;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1177);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1178) {\n s0 = peg$c1178;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1179);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1180) {\n s0 = peg$c1180;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1181);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1182) {\n s0 = peg$c1182;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1183);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1184) {\n s0 = peg$c1184;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1185);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1186) {\n s0 = peg$c1186;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1187);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1188) {\n s0 = peg$c1188;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1189);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1190) {\n s0 = peg$c1190;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1191);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1192) {\n s0 = peg$c1192;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1193);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1194) {\n s0 = peg$c1194;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1195);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1196) {\n s0 = peg$c1196;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1197);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1198) {\n s0 = peg$c1198;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1199);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1200) {\n s0 = peg$c1200;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1201);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1144) {\n s0 = peg$c1144;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1145);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1202) {\n s0 = peg$c1202;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1203);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1204) {\n s0 = peg$c1204;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1205);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1206) {\n s0 = peg$c1206;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1207);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1208) {\n s0 = peg$c1208;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1209);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1210) {\n s0 = peg$c1210;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1211);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1182) {\n s0 = peg$c1182;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1183);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1212) {\n s0 = peg$c1212;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1213);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1214) {\n s0 = peg$c1214;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1215);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1216) {\n s0 = peg$c1216;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1217);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1218) {\n s0 = peg$c1218;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1219);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1220) {\n s0 = peg$c1220;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1221);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 6) === peg$c1222) {\n s0 = peg$c1222;\n peg$currPos += 6;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1223);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1224) {\n s0 = peg$c1224;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1225);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1226) {\n s0 = peg$c1226;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1227);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1228) {\n s0 = peg$c1228;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1229);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1230) {\n s0 = peg$c1230;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1231);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1232) {\n s0 = peg$c1232;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1233);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1234) {\n s0 = peg$c1234;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1235);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1236) {\n s0 = peg$c1236;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1237);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1238) {\n s0 = peg$c1238;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1239);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1240) {\n s0 = peg$c1240;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1241);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1242) {\n s0 = peg$c1242;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1243);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1244) {\n s0 = peg$c1244;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1245);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1246) {\n s0 = peg$c1246;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1247);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1248) {\n s0 = peg$c1248;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1249);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1246) {\n s0 = peg$c1246;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1247);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1250) {\n s0 = peg$c1250;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1251);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1252) {\n s0 = peg$c1252;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1253);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1254) {\n s0 = peg$c1254;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1255);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1256) {\n s0 = peg$c1256;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1257);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1258) {\n s0 = peg$c1258;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1259);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1260) {\n s0 = peg$c1260;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1261);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1262) {\n s0 = peg$c1262;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1263);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1264) {\n s0 = peg$c1264;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1265);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1266) {\n s0 = peg$c1266;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1267);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1268) {\n s0 = peg$c1268;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1269);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1270) {\n s0 = peg$c1270;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1271);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1272) {\n s0 = peg$c1272;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1273);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1274) {\n s0 = peg$c1274;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1275);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseChordSuffix6() {\n let s0;\n if (input.substr(peg$currPos, 5) === peg$c1276) {\n s0 = peg$c1276;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1277);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1278) {\n s0 = peg$c1278;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1279);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1280) {\n s0 = peg$c1280;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1281);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1282) {\n s0 = peg$c1282;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1283);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1284) {\n s0 = peg$c1284;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1285);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1286) {\n s0 = peg$c1286;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1287);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1288) {\n s0 = peg$c1288;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1289);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1290) {\n s0 = peg$c1290;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1291);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1292) {\n s0 = peg$c1292;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1293);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1294) {\n s0 = peg$c1294;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1295);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1296) {\n s0 = peg$c1296;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1297);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1298) {\n s0 = peg$c1298;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1299);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1300) {\n s0 = peg$c1300;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1301);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1302) {\n s0 = peg$c1302;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1303);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1304) {\n s0 = peg$c1304;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1305);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1306) {\n s0 = peg$c1306;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1307);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1308) {\n s0 = peg$c1308;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1309);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1310) {\n s0 = peg$c1310;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1311);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1312) {\n s0 = peg$c1312;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1313);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1314) {\n s0 = peg$c1314;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1315);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1316) {\n s0 = peg$c1316;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1317);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1318) {\n s0 = peg$c1318;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1319);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1320) {\n s0 = peg$c1320;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1321);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1322) {\n s0 = peg$c1322;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1323);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1324) {\n s0 = peg$c1324;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1325);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1326) {\n s0 = peg$c1326;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1327);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1328) {\n s0 = peg$c1328;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1329);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1330) {\n s0 = peg$c1330;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1331);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1332) {\n s0 = peg$c1332;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1333);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1334) {\n s0 = peg$c1334;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1335);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1336) {\n s0 = peg$c1336;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1337);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1338) {\n s0 = peg$c1338;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1339);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1340) {\n s0 = peg$c1340;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1341);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1342) {\n s0 = peg$c1342;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1343);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1344) {\n s0 = peg$c1344;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1345);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1346) {\n s0 = peg$c1346;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1347);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1348) {\n s0 = peg$c1348;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1349);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1350) {\n s0 = peg$c1350;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1351);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1352) {\n s0 = peg$c1352;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1353);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1354) {\n s0 = peg$c1354;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1355);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1356) {\n s0 = peg$c1356;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1357);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1358) {\n s0 = peg$c1358;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1359);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1360) {\n s0 = peg$c1360;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1361);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1362) {\n s0 = peg$c1362;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1363);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1364) {\n s0 = peg$c1364;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1365);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1362) {\n s0 = peg$c1362;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1363);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1366) {\n s0 = peg$c1366;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1367);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1368) {\n s0 = peg$c1368;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1369);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1370) {\n s0 = peg$c1370;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1371);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1372) {\n s0 = peg$c1372;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1373);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1374) {\n s0 = peg$c1374;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1375);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1376) {\n s0 = peg$c1376;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1377);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1378) {\n s0 = peg$c1378;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1379);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1380) {\n s0 = peg$c1380;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1381);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1382) {\n s0 = peg$c1382;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1383);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1384) {\n s0 = peg$c1384;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1385);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1386) {\n s0 = peg$c1386;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1387);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1388) {\n s0 = peg$c1388;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1389);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1390) {\n s0 = peg$c1390;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1391);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1392) {\n s0 = peg$c1392;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1393);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1394) {\n s0 = peg$c1394;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1395);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1396) {\n s0 = peg$c1396;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1397);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1398) {\n s0 = peg$c1398;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1399);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1398) {\n s0 = peg$c1398;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1399);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1400) {\n s0 = peg$c1400;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1401);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1402) {\n s0 = peg$c1402;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1403);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1404) {\n s0 = peg$c1404;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1405);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1406) {\n s0 = peg$c1406;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1407);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1408) {\n s0 = peg$c1408;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1409);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1410) {\n s0 = peg$c1410;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1411);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1412) {\n s0 = peg$c1412;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1413);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1414) {\n s0 = peg$c1414;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1415);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1416) {\n s0 = peg$c1416;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1417);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1418) {\n s0 = peg$c1418;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1419);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1420) {\n s0 = peg$c1420;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1421);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1422) {\n s0 = peg$c1422;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1423);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1424) {\n s0 = peg$c1424;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1425);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1426) {\n s0 = peg$c1426;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1427);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1428) {\n s0 = peg$c1428;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1429);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1430) {\n s0 = peg$c1430;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1431);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1432) {\n s0 = peg$c1432;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1433);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1434) {\n s0 = peg$c1434;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1435);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1436) {\n s0 = peg$c1436;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1437);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1438) {\n s0 = peg$c1438;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1439);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1440) {\n s0 = peg$c1440;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1441);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1442) {\n s0 = peg$c1442;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1443);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1444) {\n s0 = peg$c1444;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1445);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1446) {\n s0 = peg$c1446;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1447);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1448) {\n s0 = peg$c1448;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1449);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1450) {\n s0 = peg$c1450;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1451);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1452) {\n s0 = peg$c1452;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1453);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1454) {\n s0 = peg$c1454;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1455);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1456) {\n s0 = peg$c1456;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1457);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1458) {\n s0 = peg$c1458;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1459);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1460) {\n s0 = peg$c1460;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1461);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1462) {\n s0 = peg$c1462;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1463);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1464) {\n s0 = peg$c1464;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1465);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1466) {\n s0 = peg$c1466;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1467);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1468) {\n s0 = peg$c1468;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1469);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1470) {\n s0 = peg$c1470;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1471);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseChordSuffix7() {\n let s0;\n if (input.substr(peg$currPos, 5) === peg$c1472) {\n s0 = peg$c1472;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1473);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1474) {\n s0 = peg$c1474;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1475);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1476) {\n s0 = peg$c1476;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1477);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1478) {\n s0 = peg$c1478;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1479);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1480) {\n s0 = peg$c1480;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1481);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1482) {\n s0 = peg$c1482;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1483);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1484) {\n s0 = peg$c1484;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1485);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1486) {\n s0 = peg$c1486;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1487);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1488) {\n s0 = peg$c1488;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1489);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1490) {\n s0 = peg$c1490;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1491);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1492) {\n s0 = peg$c1492;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1493);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1494) {\n s0 = peg$c1494;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1495);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1496) {\n s0 = peg$c1496;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1497);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1498) {\n s0 = peg$c1498;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1499);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 5) === peg$c1500) {\n s0 = peg$c1500;\n peg$currPos += 5;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1501);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1502) {\n s0 = peg$c1502;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1503);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1504) {\n s0 = peg$c1504;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1505);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1506) {\n s0 = peg$c1506;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1507);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1508) {\n s0 = peg$c1508;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1509);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1510) {\n s0 = peg$c1510;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1511);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1512) {\n s0 = peg$c1512;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1513);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1514) {\n s0 = peg$c1514;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1515);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1516) {\n s0 = peg$c1516;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1517);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1518) {\n s0 = peg$c1518;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1519);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1520) {\n s0 = peg$c1520;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1521);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1522) {\n s0 = peg$c1522;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1523);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1524) {\n s0 = peg$c1524;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1525);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1526) {\n s0 = peg$c1526;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1527);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1528) {\n s0 = peg$c1528;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1529);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1530) {\n s0 = peg$c1530;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1531);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1532) {\n s0 = peg$c1532;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1533);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1534) {\n s0 = peg$c1534;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1535);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1536) {\n s0 = peg$c1536;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1537);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1538) {\n s0 = peg$c1538;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1539);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1540) {\n s0 = peg$c1540;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1541);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1542) {\n s0 = peg$c1542;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1543);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1544) {\n s0 = peg$c1544;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1545);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1546) {\n s0 = peg$c1546;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1547);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1548) {\n s0 = peg$c1548;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1549);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1550) {\n s0 = peg$c1550;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1551);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1552) {\n s0 = peg$c1552;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1553);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1554) {\n s0 = peg$c1554;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1555);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1556) {\n s0 = peg$c1556;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1557);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1558) {\n s0 = peg$c1558;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1559);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1560) {\n s0 = peg$c1560;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1561);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1562) {\n s0 = peg$c1562;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1563);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1564) {\n s0 = peg$c1564;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1565);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1566) {\n s0 = peg$c1566;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1567);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1568) {\n s0 = peg$c1568;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1569);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1570) {\n s0 = peg$c1570;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1571);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1572) {\n s0 = peg$c1572;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1573);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1574) {\n s0 = peg$c1574;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1575);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1576) {\n s0 = peg$c1576;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1577);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1578) {\n s0 = peg$c1578;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1579);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1580) {\n s0 = peg$c1580;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1581);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1582) {\n s0 = peg$c1582;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1583);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1584) {\n s0 = peg$c1584;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1585);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1586) {\n s0 = peg$c1586;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1587);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1588) {\n s0 = peg$c1588;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1589);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1590) {\n s0 = peg$c1590;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1591);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1592) {\n s0 = peg$c1592;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1593);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1594) {\n s0 = peg$c1594;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1595);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1596) {\n s0 = peg$c1596;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1597);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1598) {\n s0 = peg$c1598;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1599);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1600) {\n s0 = peg$c1600;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1601);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1602) {\n s0 = peg$c1602;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1603);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1604) {\n s0 = peg$c1604;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1605);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1606) {\n s0 = peg$c1606;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1607);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1608) {\n s0 = peg$c1608;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1609);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1610) {\n s0 = peg$c1610;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1611);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1612) {\n s0 = peg$c1612;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1613);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1614) {\n s0 = peg$c1614;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1615);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1616) {\n s0 = peg$c1616;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1617);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1618) {\n s0 = peg$c1618;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1619);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1620) {\n s0 = peg$c1620;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1621);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1622) {\n s0 = peg$c1622;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1623);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1624) {\n s0 = peg$c1624;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1625);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1626) {\n s0 = peg$c1626;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1627);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1628) {\n s0 = peg$c1628;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1629);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1630) {\n s0 = peg$c1630;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1631);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1632) {\n s0 = peg$c1632;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1633);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1634) {\n s0 = peg$c1634;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1635);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1636) {\n s0 = peg$c1636;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1637);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1634) {\n s0 = peg$c1634;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1635);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1638) {\n s0 = peg$c1638;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1639);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1640) {\n s0 = peg$c1640;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1641);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1642) {\n s0 = peg$c1642;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1643);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1640) {\n s0 = peg$c1640;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1641);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1644) {\n s0 = peg$c1644;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1645);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1646) {\n s0 = peg$c1646;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1647);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1648) {\n s0 = peg$c1648;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1649);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1646) {\n s0 = peg$c1646;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1647);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1650) {\n s0 = peg$c1650;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1651);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1652) {\n s0 = peg$c1652;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1653);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1654) {\n s0 = peg$c1654;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1655);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1652) {\n s0 = peg$c1652;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1653);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1656) {\n s0 = peg$c1656;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1657);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1658) {\n s0 = peg$c1658;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1659);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1616) {\n s0 = peg$c1616;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1617);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1660) {\n s0 = peg$c1660;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1661);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseChordSuffix8() {\n let s0;\n if (input.substr(peg$currPos, 4) === peg$c1616) {\n s0 = peg$c1616;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1617);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1662) {\n s0 = peg$c1662;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1663);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1664) {\n s0 = peg$c1664;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1665);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1666) {\n s0 = peg$c1666;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1667);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1618) {\n s0 = peg$c1618;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1619);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1668) {\n s0 = peg$c1668;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1669);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1670) {\n s0 = peg$c1670;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1671);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1672) {\n s0 = peg$c1672;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1673);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1674) {\n s0 = peg$c1674;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1675);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1676) {\n s0 = peg$c1676;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1677);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1672) {\n s0 = peg$c1672;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1673);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1678) {\n s0 = peg$c1678;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1679);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1678) {\n s0 = peg$c1678;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1679);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1680) {\n s0 = peg$c1680;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1681);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1682) {\n s0 = peg$c1682;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1683);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1684) {\n s0 = peg$c1684;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1685);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1686) {\n s0 = peg$c1686;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1687);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1688) {\n s0 = peg$c1688;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1689);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1690) {\n s0 = peg$c1690;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1691);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1692) {\n s0 = peg$c1692;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1693);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1694) {\n s0 = peg$c1694;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1695);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1696) {\n s0 = peg$c1696;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1697);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1698) {\n s0 = peg$c1698;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1699);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1700) {\n s0 = peg$c1700;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1701);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1670) {\n s0 = peg$c1670;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1671);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1702) {\n s0 = peg$c1702;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1703);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1704) {\n s0 = peg$c1704;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1705);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1706) {\n s0 = peg$c1706;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1707);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1708) {\n s0 = peg$c1708;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1709);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 4) === peg$c1710) {\n s0 = peg$c1710;\n peg$currPos += 4;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1711);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1712) {\n s0 = peg$c1712;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1713);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1714) {\n s0 = peg$c1714;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1715);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1716) {\n s0 = peg$c1716;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1717);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1718) {\n s0 = peg$c1718;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1719);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1720) {\n s0 = peg$c1720;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1721);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1722) {\n s0 = peg$c1722;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1723);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1724) {\n s0 = peg$c1724;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1725);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1726) {\n s0 = peg$c1726;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1727);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1728) {\n s0 = peg$c1728;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1729);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1730) {\n s0 = peg$c1730;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1731);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1732) {\n s0 = peg$c1732;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1733);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1734) {\n s0 = peg$c1734;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1735);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1736) {\n s0 = peg$c1736;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1737);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1738) {\n s0 = peg$c1738;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1739);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1740) {\n s0 = peg$c1740;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1741);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1742) {\n s0 = peg$c1742;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1743);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1744) {\n s0 = peg$c1744;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1745);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1746) {\n s0 = peg$c1746;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1747);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1748) {\n s0 = peg$c1748;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1749);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1750) {\n s0 = peg$c1750;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1751);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1752) {\n s0 = peg$c1752;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1753);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1754) {\n s0 = peg$c1754;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1755);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1756) {\n s0 = peg$c1756;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1757);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1758) {\n s0 = peg$c1758;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1759);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1760) {\n s0 = peg$c1760;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1761);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1762) {\n s0 = peg$c1762;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1763);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1764) {\n s0 = peg$c1764;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1765);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1766) {\n s0 = peg$c1766;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1767);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1768) {\n s0 = peg$c1768;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1769);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1770) {\n s0 = peg$c1770;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1771);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1772) {\n s0 = peg$c1772;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1773);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1774) {\n s0 = peg$c1774;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1775);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1776) {\n s0 = peg$c1776;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1777);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1778) {\n s0 = peg$c1778;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1779);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1780) {\n s0 = peg$c1780;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1781);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1782) {\n s0 = peg$c1782;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1783);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1784) {\n s0 = peg$c1784;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1785);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1786) {\n s0 = peg$c1786;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1787);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1788) {\n s0 = peg$c1788;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1789);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1790) {\n s0 = peg$c1790;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1791);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1792) {\n s0 = peg$c1792;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1793);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1794) {\n s0 = peg$c1794;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1795);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1796) {\n s0 = peg$c1796;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1797);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1798) {\n s0 = peg$c1798;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1799);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1800) {\n s0 = peg$c1800;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1801);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1802) {\n s0 = peg$c1802;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1803);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1790) {\n s0 = peg$c1790;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1791);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1790) {\n s0 = peg$c1790;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1791);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 3) === peg$c1804) {\n s0 = peg$c1804;\n peg$currPos += 3;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1805);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1806) {\n s0 = peg$c1806;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1807);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1808) {\n s0 = peg$c1808;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1809);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1810) {\n s0 = peg$c1810;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1811);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1812) {\n s0 = peg$c1812;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1813);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1814) {\n s0 = peg$c1814;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1815);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1816) {\n s0 = peg$c1816;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1817);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1818) {\n s0 = peg$c1818;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1819);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1820) {\n s0 = peg$c1820;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1821);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1822) {\n s0 = peg$c1822;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1823);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1824) {\n s0 = peg$c1824;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1825);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1824) {\n s0 = peg$c1824;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1825);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1826) {\n s0 = peg$c1826;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1827);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1828) {\n s0 = peg$c1828;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1829);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1830) {\n s0 = peg$c1830;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1831);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1832) {\n s0 = peg$c1832;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1833);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1834) {\n s0 = peg$c1834;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1835);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c65) {\n s0 = peg$c65;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1836);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1837) {\n s0 = peg$c1837;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1838);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1839) {\n s0 = peg$c1839;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1840);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1841) {\n s0 = peg$c1841;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1842);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1843) {\n s0 = peg$c1843;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1844);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parseChordSuffix9() {\n let s0;\n if (input.substr(peg$currPos, 2) === peg$c1845) {\n s0 = peg$c1845;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1846);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1847) {\n s0 = peg$c1847;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1848);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1849) {\n s0 = peg$c1849;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1850);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1851) {\n s0 = peg$c1851;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1852);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1853) {\n s0 = peg$c1853;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1854);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1855) {\n s0 = peg$c1855;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1856);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1857) {\n s0 = peg$c1857;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1858);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1859) {\n s0 = peg$c1859;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1860);\n }\n if (s0 === peg$FAILED) {\n if (input.substr(peg$currPos, 2) === peg$c1861) {\n s0 = peg$c1861;\n peg$currPos += 2;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1862);\n }\n if (s0 === peg$FAILED) {\n if (peg$c1863.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1864);\n }\n }\n }\n }\n }\n }\n }\n }\n }\n }\n return s0;\n }\n function peg$parse__() {\n let s0, s1;\n peg$silentFails++;\n s0 = [];\n s1 = peg$parseWhitespaceCharacter();\n if (s1 !== peg$FAILED) while(s1 !== peg$FAILED){\n s0.push(s1);\n s1 = peg$parseWhitespaceCharacter();\n }\n else s0 = peg$FAILED;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c46);\n }\n return s0;\n }\n function peg$parse_() {\n let s0, s1;\n peg$silentFails++;\n s0 = [];\n s1 = peg$parseWhitespaceCharacter();\n while(s1 !== peg$FAILED){\n s0.push(s1);\n s1 = peg$parseWhitespaceCharacter();\n }\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1865);\n }\n return s0;\n }\n function peg$parseWhitespaceCharacter() {\n let s0;\n if (peg$c1866.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1867);\n }\n return s0;\n }\n function peg$parseSpace() {\n let s0, s1, s2;\n peg$silentFails++;\n s0 = peg$currPos;\n s1 = [];\n if (peg$c47.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c48);\n }\n if (s2 !== peg$FAILED) while(s2 !== peg$FAILED){\n s1.push(s2);\n if (peg$c47.test(input.charAt(peg$currPos))) {\n s2 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s2 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c48);\n }\n }\n else s1 = peg$FAILED;\n if (s1 !== peg$FAILED) s0 = input.substring(s0, peg$currPos);\n else s0 = s1;\n peg$silentFails--;\n if (s0 === peg$FAILED) {\n s1 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1868);\n }\n return s0;\n }\n function peg$parseNewLine() {\n let s0;\n if (peg$c1869.test(input.charAt(peg$currPos))) {\n s0 = input.charAt(peg$currPos);\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1870);\n }\n if (s0 === peg$FAILED) s0 = peg$parseCarriageReturnLineFeed();\n return s0;\n }\n function peg$parseCarriageReturnLineFeed() {\n let s0, s1, s2;\n s0 = peg$currPos;\n s1 = peg$parseCarriageReturn();\n if (s1 !== peg$FAILED) {\n s2 = peg$parseLineFeed();\n if (s2 !== peg$FAILED) {\n s1 = [\n s1,\n s2\n ];\n s0 = s1;\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n } else {\n peg$currPos = s0;\n s0 = peg$FAILED;\n }\n return s0;\n }\n function peg$parseLineFeed() {\n let s0;\n if (input.charCodeAt(peg$currPos) === 10) {\n s0 = peg$c1871;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1872);\n }\n return s0;\n }\n function peg$parseCarriageReturn() {\n let s0;\n if (input.charCodeAt(peg$currPos) === 13) {\n s0 = peg$c1873;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1874);\n }\n return s0;\n }\n function peg$parseEscape() {\n let s0;\n if (input.charCodeAt(peg$currPos) === 92) {\n s0 = peg$c1875;\n peg$currPos++;\n } else {\n s0 = peg$FAILED;\n if (peg$silentFails === 0) peg$fail(peg$c1876);\n }\n return s0;\n }\n peg$result = peg$startRuleFunction();\n if (peg$result !== peg$FAILED && peg$currPos === input.length) return peg$result;\n else {\n if (peg$result !== peg$FAILED && peg$currPos < input.length) peg$fail(peg$endExpectation());\n throw peg$buildStructuredError(peg$maxFailExpected, peg$maxFailPos < input.length ? input.charAt(peg$maxFailPos) : null, peg$maxFailPos < input.length ? peg$computeLocation(peg$maxFailPos, peg$maxFailPos + 1) : peg$computeLocation(peg$maxFailPos, peg$maxFailPos));\n }\n}\nconst $f22c8d9a47c38bea$export$98e6a39c04603d36 = $f22c8d9a47c38bea$var$peg$parse;\n\n\n\n\n\n/**\n * Parses a chords over words sheet into a song\n *\n * It support \"regular\" chord sheets:\n *\n * Am C/G F C\n * Let it be, let it be, let it be, let it be\n * C G F C/E Dm C\n * Whisper words of wisdom, let it be\n *\n * Additionally, some chordpro features have been \"ported back\". For example, you can use chordpro directives:\n *\n * {title: Let it be}\n * {key: C}\n * Chorus 1:\n * Am\n * Let it be\n *\n * For convenience, you can leave out the brackets:\n *\n * title: Let it be\n * Chorus 1:\n * Am\n * Let it be\n *\n * You can even use a markdown style frontmatter separator to separate the header from the song:\n *\n * title: Let it be\n * key: C\n * ---\n * Chorus 1:\n * Am C/G F C\n * Let it be, let it be, let it be, let it be\n * C G F C/E Dm C\n * Whisper words of wisdom, let it be\n *\n * `ChordsOverWordsParser` is the better version of `ChordSheetParser`, which is deprecated.\n */ class $b58bece5a707e8d1$var$ChordsOverWordsParser {\n /**\n * All warnings raised during parsing the chord sheet\n * @member\n * @type {ParserWarning[]}\n */ get warnings() {\n return this.song?.warnings || [];\n }\n /**\n * Parses a chords over words sheet into a song\n * @param {string} chordSheet the chords over words sheet\n * @param {ChordsOverWordsParserOptions} options Parser options.\n * @param {ChordsOverWordsParserOptions.softLineBreaks} options.softLineBreaks=false If true, a backslash\n * followed by a space is treated as a soft line break\n * @param {ChordsOverWordsParserOptions.chopFirstWord} options.chopFirstWord=true If true, only the first lyric\n * word is paired with the chord, the rest of the lyric is put in a separate chord lyric pair\n * @see https://peggyjs.org/documentation.html#using-the-parser\n * @returns {Song} The parsed song\n */ parse(chordSheet, options) {\n const ast = (0, $f22c8d9a47c38bea$export$98e6a39c04603d36)((0, $f52913d8767c6236$export$ba13e0e2f19e61a1)(chordSheet), {\n tracer: new (0, $a68b1ca180ade890$export$2e2bcd8739ae039)(),\n ...options\n });\n this.song = new (0, $6f86ed99ed3b8cb9$export$2e2bcd8739ae039)().deserialize(ast);\n return this.song;\n }\n}\nvar $b58bece5a707e8d1$export$2e2bcd8739ae039 = $b58bece5a707e8d1$var$ChordsOverWordsParser;\n\n\n\n\n\n\n/**\n * Acts as a base class for HTML formatters\n */ class $24ff40cf6e6a7e2f$var$HtmlFormatter extends (0, $750c574c15888689$export$2e2bcd8739ae039) {\n /**\n * Formats a song into HTML.\n * @param {Song} song The song to be formatted\n * @returns {string} The HTML string\n */ format(song) {\n const { bodyParagraphs: bodyParagraphs, expandedBodyParagraphs: expandedBodyParagraphs } = song;\n return this.template({\n song: song,\n configuration: this.configuration,\n bodyParagraphs: this.configuration.expandChorusDirective ? expandedBodyParagraphs : bodyParagraphs\n });\n }\n /**\n * Generates basic CSS, optionally scoped within the provided selector, to use with the HTML output\n *\n * For example, execute cssString('.chordSheetViewer') will result in CSS like:\n *\n * .chordSheetViewer .paragraph {\n * margin-bottom: 1em;\n * }\n *\n * @param scope the CSS scope to use, for example `.chordSheetViewer`\n * @returns {string} the CSS string\n */ cssString(scope = '') {\n return (0, $f52913d8767c6236$export$59d377d2a2e0150a)(this.defaultCss, scope);\n }\n /**\n * Basic CSS, in object style à la useStyles, to use with the HTML output\n * For a CSS string see {@link cssString}\n *\n * Example:\n *\n * '.paragraph': {\n * marginBottom: '1em'\n * }\n *\n * @return {Object.>} the CSS object\n */ get cssObject() {\n return this.defaultCss;\n }\n}\nvar $24ff40cf6e6a7e2f$export$2e2bcd8739ae039 = $24ff40cf6e6a7e2f$var$HtmlFormatter;\n\n\n\n\n\nvar $ee682089fac609da$export$2e2bcd8739ae039 = ({ configuration: configuration, configuration: { key: key }, song: song, renderBlankLines: renderBlankLines = false, song: { title: title, subtitle: subtitle, metadata: metadata }, bodyParagraphs: bodyParagraphs })=>(0, $dfcb12f4c26c139d$export$6ea1b0eb82ead3f)(`\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)(title, ()=>`

${title}

`)}\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)(subtitle, ()=>`

${subtitle}

`)}\n\n
\n ${(0, $dfcb12f4c26c139d$export$79b2f7037acddd43)(bodyParagraphs, (paragraph)=>`\n
\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)(paragraph.isLiteral(), ()=>`\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)((0, $f52913d8767c6236$export$ee27c052bca048fb)(paragraph.label), ()=>`\n
\n

${paragraph.label}

\n
\n `)}\n\n
\n
${(0, $dfcb12f4c26c139d$export$e2953cc935d48476)((0, $dfcb12f4c26c139d$export$4c0287abd2ec956e)(paragraph, configuration))}
\n
\n `).else(()=>`\n ${(0, $dfcb12f4c26c139d$export$79b2f7037acddd43)(paragraph.lines, (line)=>`\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)(renderBlankLines || (0, $dfcb12f4c26c139d$export$3db5961874282581)(line), ()=>`\n
\n ${(0, $dfcb12f4c26c139d$export$79b2f7037acddd43)(line.items, (item)=>`\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)((0, $dfcb12f4c26c139d$export$17c9e635b932873b)(item), ()=>`\n
\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)(item.annotation).then(()=>`\n
${item.annotation}
\n `).else(()=>`\n
\n ${(0, $f5b90e5dc4871932$export$596ec52955da9472)(item.chords, line, song, {\n renderKey: key,\n useUnicodeModifier: configuration.useUnicodeModifiers,\n normalizeChords: configuration.normalizeChords,\n decapo: configuration.decapo\n })}\n
\n `)}\n
${item.lyrics}
\n
\n `).elseWhen((0, $dfcb12f4c26c139d$export$3bf645f08efe3292)(item), ()=>`\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)((0, $dfcb12f4c26c139d$export$3ab01370f5e64ac8)(item), ()=>`\n
${item.value}
\n `)}\n\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)(item.hasRenderableLabel(), ()=>`\n

${item.label}

\n `)}\n `).elseWhen((0, $f52913d8767c6236$export$e3f63561d52b936d)(item), ()=>`\n
\n
\n
\n ${(0, $dfcb12f4c26c139d$export$fef61f332f2c0afc)(item, metadata, configuration)}\n
\n
\n `)}\n `)}\n
\n `)}\n `)}\n `)}\n
\n `)}\n
\n`);\n\n\n\nconst $79e99f27b77a3c71$var$defaultCss = {\n '.chord:not(:last-child)': {\n paddingRight: '10px'\n },\n '.paragraph': {\n marginBottom: '1em'\n },\n '.row': {\n display: 'flex'\n },\n '.chord:after': {\n content: '\\'\\\\200b\\''\n },\n '.lyrics:after': {\n content: '\\'\\\\200b\\''\n }\n};\nfunction $79e99f27b77a3c71$export$aa5b6043dd05348b(scope) {\n return (0, $f52913d8767c6236$export$59d377d2a2e0150a)($79e99f27b77a3c71$var$defaultCss, scope);\n}\n/**\n * Formats a song into HTML. It uses DIVs to align lyrics with chords, which makes it useful for responsive web pages.\n */ class $79e99f27b77a3c71$var$HtmlDivFormatter extends (0, $24ff40cf6e6a7e2f$export$2e2bcd8739ae039) {\n get template() {\n return 0, $ee682089fac609da$export$2e2bcd8739ae039;\n }\n get defaultCss() {\n return $79e99f27b77a3c71$var$defaultCss;\n }\n}\nvar $79e99f27b77a3c71$export$2e2bcd8739ae039 = $79e99f27b77a3c71$var$HtmlDivFormatter;\n\n\n\n\n\n\nvar $9c5f7d5454a05db6$export$2e2bcd8739ae039 = ({ configuration: configuration, configuration: { key: key }, song: song, renderBlankLines: renderBlankLines = false, song: { title: title, subtitle: subtitle, bodyLines: bodyLines, metadata: metadata }, bodyParagraphs: bodyParagraphs })=>(0, $dfcb12f4c26c139d$export$6ea1b0eb82ead3f)(`\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)(title, ()=>`

${title}

`)}\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)(subtitle, ()=>`

${subtitle}

`)}\n\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)(bodyLines.length > 0, ()=>`\n
\n ${(0, $dfcb12f4c26c139d$export$79b2f7037acddd43)(bodyParagraphs, (paragraph)=>`\n
\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)(paragraph.isLiteral(), ()=>`\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)((0, $f52913d8767c6236$export$ee27c052bca048fb)(paragraph.label), ()=>`\n \n \n \n \n
\n

${paragraph.label}

\n
\n `)}\n\n \n \n \n \n
${(0, $dfcb12f4c26c139d$export$e2953cc935d48476)((0, $dfcb12f4c26c139d$export$4c0287abd2ec956e)(paragraph, configuration))}
\n `).else(()=>`\n ${(0, $dfcb12f4c26c139d$export$79b2f7037acddd43)(paragraph.lines, (line)=>`\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)(renderBlankLines || (0, $dfcb12f4c26c139d$export$3db5961874282581)(line), ()=>`\n \n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)((0, $f52913d8767c6236$export$d332d76d125f0cbe)(line), ()=>`\n \n ${(0, $dfcb12f4c26c139d$export$79b2f7037acddd43)(line.items, (item)=>`\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)((0, $dfcb12f4c26c139d$export$17c9e635b932873b)(item), ()=>`\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)(item.annotation).then(()=>`\n \n `).else(()=>`\n \n `)}\n `)}\n `)}\n \n `)}\n\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)((0, $dfcb12f4c26c139d$export$b8d631d9200974fa)(line), ()=>`\n \n ${(0, $dfcb12f4c26c139d$export$79b2f7037acddd43)(line.items, (item)=>`\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)((0, $dfcb12f4c26c139d$export$17c9e635b932873b)(item), ()=>`\n \n `).elseWhen((0, $dfcb12f4c26c139d$export$3bf645f08efe3292)(item), ()=>`\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)((0, $dfcb12f4c26c139d$export$3ab01370f5e64ac8)(item), ()=>`\n \n `)}\n\n ${(0, $dfcb12f4c26c139d$export$a55877ca9db47377)(item.hasRenderableLabel(), ()=>`\n \n `)}\n `).elseWhen((0, $dfcb12f4c26c139d$export$899158ea22bb4609)(item), ()=>`\n \n `).elseWhen((0, $f52913d8767c6236$export$e3f63561d52b936d)(item), ()=>`\n \n `)}\n `)}\n \n `)}\n
${item.annotation}${(0, $f5b90e5dc4871932$export$596ec52955da9472)(item.chords, line, song, {\n renderKey: key,\n useUnicodeModifier: configuration.useUnicodeModifiers,\n normalizeChords: configuration.normalizeChords,\n decapo: configuration.decapo\n })}
${item.lyrics}${item.value}

${item.label}

${item.string}\n ${(0, $dfcb12f4c26c139d$export$fef61f332f2c0afc)(item, metadata, configuration)}\n
\n `)}\n `)}\n `)}\n
\n `)}\n
\n `)}\n`);\n\n\n\nconst $caa8cd86020c188e$var$defaultCss = {\n 'h1': {\n fontSize: '1.5em'\n },\n 'h2': {\n fontSize: '1.1em'\n },\n 'table': {\n borderSpacing: '0',\n color: 'inherit'\n },\n 'td': {\n padding: '3px 0'\n },\n '.chord:not(:last-child)': {\n paddingRight: '10px'\n },\n '.paragraph': {\n marginBottom: '1em'\n }\n};\nfunction $caa8cd86020c188e$export$aa5b6043dd05348b(scope) {\n return (0, $f52913d8767c6236$export$59d377d2a2e0150a)($caa8cd86020c188e$var$defaultCss, scope);\n}\n/**\n * Formats a song into HTML. It uses TABLEs to align lyrics with chords, which makes the HTML for things like\n * PDF conversion.\n */ class $caa8cd86020c188e$var$HtmlTableFormatter extends (0, $24ff40cf6e6a7e2f$export$2e2bcd8739ae039) {\n get template() {\n return 0, $9c5f7d5454a05db6$export$2e2bcd8739ae039;\n }\n get defaultCss() {\n return $caa8cd86020c188e$var$defaultCss;\n }\n}\nvar $caa8cd86020c188e$export$2e2bcd8739ae039 = $caa8cd86020c188e$var$HtmlTableFormatter;\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Formats a song into a plain text chord sheet\n */ class $e2dfad8e72d5aab0$var$TextFormatter extends (0, $750c574c15888689$export$2e2bcd8739ae039) {\n /**\n * Formats a song into a plain text chord sheet\n * @param {Song} song The song to be formatted\n * @returns {string} the chord sheet\n */ format(song) {\n this.song = song;\n return [\n this.formatHeader(),\n this.formatParagraphs()\n ].join('');\n }\n formatHeader() {\n const { title: title, subtitle: subtitle } = this.song;\n const separator = title || subtitle ? '\\n' : '';\n return [\n this.formatTitle(title),\n this.formatSubTitle(subtitle),\n separator\n ].join('');\n }\n formatParagraphs() {\n const { bodyParagraphs: bodyParagraphs, expandedBodyParagraphs: expandedBodyParagraphs, metadata: metadata } = this.song;\n const { expandChorusDirective: expandChorusDirective } = this.configuration;\n return (expandChorusDirective ? expandedBodyParagraphs : bodyParagraphs).map((paragraph)=>this.formatParagraph(paragraph, metadata)).join('\\n\\n');\n }\n formatParagraph(paragraph, metadata) {\n if (paragraph.isLiteral()) return [\n paragraph.label,\n (0, $dfcb12f4c26c139d$export$4c0287abd2ec956e)(paragraph, this.configuration)\n ].filter((part)=>part).join('\\n');\n return paragraph.lines.filter((line)=>line.hasRenderableItems()).map((line)=>this.formatLine(line, metadata)).join('\\n');\n }\n formatLine(line, metadata) {\n const parts = [\n this.formatLineTop(line, metadata),\n this.formatLineBottom(line, metadata)\n ];\n return parts.filter((p)=>!(0, $f52913d8767c6236$export$78d1711480f95c3e)(p)).map((part)=>(part || '').trimEnd()).join('\\n');\n }\n formatTitle(title) {\n if (title) return `${title.toUpperCase()}\\n`;\n return '';\n }\n formatSubTitle(subtitle) {\n if (subtitle) return `${subtitle}\\n`;\n return '';\n }\n formatLineTop(line, metadata) {\n if ((0, $f52913d8767c6236$export$bf7e789722aab9d6)(line)) return this.formatLineWithFormatter(line, this.formatItemTop, metadata);\n return null;\n }\n chordLyricsPairLength(chordLyricsPair, line) {\n const content = chordLyricsPair.annotation || this.renderChords(chordLyricsPair, line);\n const { lyrics: lyrics } = chordLyricsPair;\n const contentLength = (content || '').length;\n const lyricsLength = (lyrics || '').length;\n if (contentLength >= lyricsLength) return contentLength + 1;\n return Math.max(contentLength, lyricsLength);\n }\n renderChords(chordLyricsPair, line) {\n const chords = (0, $f5b90e5dc4871932$export$596ec52955da9472)(chordLyricsPair.chords, line, this.song, {\n renderKey: this.configuration.key,\n useUnicodeModifier: this.configuration.useUnicodeModifiers,\n normalizeChords: this.configuration.normalizeChords,\n decapo: this.configuration.decapo\n });\n return chords;\n }\n formatItemTop(item, _metadata, line) {\n if (item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039) && item.isRenderable()) return item.label;\n if (item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039)) {\n const content = item.annotation || this.renderChords(item, line);\n return (0, $f52913d8767c6236$export$bc3bea8325045070)(content, this.chordLyricsPairLength(item, line));\n }\n return '';\n }\n formatLineBottom(line, metadata) {\n if ((0, $dfcb12f4c26c139d$export$b8d631d9200974fa)(line)) return this.formatLineWithFormatter(line, this.formatItemBottom, metadata);\n return '';\n }\n formatLineWithFormatter(line, formatter, metadata) {\n return line.items.map((item)=>formatter.call(this, item, metadata, line)).join('');\n }\n formatItemBottom(item, metadata, line) {\n if (item instanceof (0, $b58c551853385714$export$2e2bcd8739ae039) && item.isRenderable()) return item.label;\n if (item instanceof (0, $0d04ced54ebef610$export$2e2bcd8739ae039)) return (0, $f52913d8767c6236$export$bc3bea8325045070)(item.lyrics || '', this.chordLyricsPairLength(item, line));\n if ('evaluate' in item) return item.evaluate(metadata, this.configuration.metadataSeparator);\n return '';\n }\n constructor(...args){\n super(...args), this.song = new (0, $962eb86a322c5cfb$export$2e2bcd8739ae039)();\n }\n}\nvar $e2dfad8e72d5aab0$export$2e2bcd8739ae039 = $e2dfad8e72d5aab0$var$TextFormatter;\n\n\n\n\n\nconst $ecd3f348894bfbde$var$VERSE_LINE_REGEX = /^\\[(Verse.*)]/i;\nconst $ecd3f348894bfbde$var$CHORUS_LINE_REGEX = /^\\[(Chorus)]/i;\nconst $ecd3f348894bfbde$var$OTHER_METADATA_LINE_REGEX = /^\\[([^\\]]+)]/;\nconst $ecd3f348894bfbde$var$startSectionTags = {\n [(0, $72b24102c7d826fd$export$4b194284baed1659)]: (0, $b58c551853385714$export$deca399f8cd9b7dc),\n [(0, $72b24102c7d826fd$export$8db6c706fc9142b2)]: (0, $b58c551853385714$export$4f5168acae064e01)\n};\nconst $ecd3f348894bfbde$var$endSectionTags = {\n [(0, $72b24102c7d826fd$export$4b194284baed1659)]: (0, $b58c551853385714$export$640d294ab83f9040),\n [(0, $72b24102c7d826fd$export$8db6c706fc9142b2)]: (0, $b58c551853385714$export$473c1a4819e5180b)\n};\n/**\n * Parses an Ultimate Guitar chord sheet with metadata\n * Inherits from {@link ChordSheetParser}\n */ class $ecd3f348894bfbde$var$UltimateGuitarParser extends (0, $f46090a0372cd33a$export$2e2bcd8739ae039) {\n /**\n * Instantiate a chord sheet parser\n * @param {Object} [options={}] options\n * @param {boolean} [options.preserveWhitespace=true] whether to preserve trailing whitespace for chords\n */ constructor({ preserveWhitespace: preserveWhitespace = true } = {}){\n super({\n preserveWhitespace: preserveWhitespace\n }, false), this.currentSectionType = null;\n }\n parseLine(line) {\n if (this.isSectionEnd()) this.endSection();\n if ($ecd3f348894bfbde$var$VERSE_LINE_REGEX.test(line)) {\n this.startNewLine();\n const label = line.match($ecd3f348894bfbde$var$VERSE_LINE_REGEX)[1];\n this.startSection((0, $72b24102c7d826fd$export$4b194284baed1659), label);\n } else if ($ecd3f348894bfbde$var$CHORUS_LINE_REGEX.test(line)) {\n this.startNewLine();\n const label = line.match($ecd3f348894bfbde$var$CHORUS_LINE_REGEX)[1];\n this.startSection((0, $72b24102c7d826fd$export$8db6c706fc9142b2), label);\n } else if ($ecd3f348894bfbde$var$OTHER_METADATA_LINE_REGEX.test(line)) this.parseMetadataLine(line);\n else super.parseLine(line);\n }\n parseMetadataLine(line) {\n this.startNewLine();\n this.endSection();\n const comment = line.match($ecd3f348894bfbde$var$OTHER_METADATA_LINE_REGEX)[1];\n if (!this.songLine) throw new Error('Expected this.songLine to be present');\n this.songLine.addTag(new (0, $b58c551853385714$export$2e2bcd8739ae039)((0, $b58c551853385714$export$a29989082612d0d9), comment));\n }\n isSectionEnd() {\n return this.songLine !== null && this.songLine.isEmpty() && this.songBuilder.previousLine !== null && !this.songBuilder.previousLine.isEmpty();\n }\n endOfSong() {\n super.endOfSong();\n if (this.currentSectionType !== null && this.currentSectionType in $ecd3f348894bfbde$var$endSectionTags) this.startNewLine();\n this.endSection({\n addNewLine: false\n });\n }\n startSection(sectionType, label) {\n if (this.currentSectionType) this.endSection();\n this.currentSectionType = sectionType;\n this.songBuilder.setCurrentProperties(sectionType);\n if (sectionType in $ecd3f348894bfbde$var$startSectionTags) this.songBuilder.addTag(new (0, $b58c551853385714$export$2e2bcd8739ae039)($ecd3f348894bfbde$var$startSectionTags[sectionType], label));\n }\n endSection({ addNewLine: addNewLine = true } = {}) {\n if (this.currentSectionType !== null && this.currentSectionType in $ecd3f348894bfbde$var$endSectionTags) {\n this.songBuilder.addTag(new (0, $b58c551853385714$export$2e2bcd8739ae039)($ecd3f348894bfbde$var$endSectionTags[this.currentSectionType]));\n if (addNewLine) this.startNewLine();\n }\n this.songBuilder.setCurrentProperties((0, $72b24102c7d826fd$export$c53d0f541b41b88e));\n this.currentSectionType = null;\n }\n startNewLine() {\n this.songLine = this.songBuilder.addLine();\n }\n}\nvar $ecd3f348894bfbde$export$2e2bcd8739ae039 = $ecd3f348894bfbde$var$UltimateGuitarParser;\n\n\n\n\n\n\n\nvar $c0b60add41284d2e$export$2e2bcd8739ae039 = {\n CHORUS: $72b24102c7d826fd$export$8db6c706fc9142b2,\n Chord: $f0449e2486cb2372$export$2e2bcd8739ae039,\n ChordDefinition: $9fb93292861ee876$export$2e2bcd8739ae039,\n ChordLyricsPair: $0d04ced54ebef610$export$2e2bcd8739ae039,\n ChordProFormatter: $fe0c6f4316da78b0$export$2e2bcd8739ae039,\n ChordProParser: $6ba1c85836253a53$export$2e2bcd8739ae039,\n ChordSheetParser: $f46090a0372cd33a$export$2e2bcd8739ae039,\n ChordSheetSerializer: $6f86ed99ed3b8cb9$export$2e2bcd8739ae039,\n ChordsOverWordsFormatter: $07208092bd922ab3$export$2e2bcd8739ae039,\n ChordsOverWordsParser: $b58bece5a707e8d1$export$2e2bcd8739ae039,\n Comment: $acbb1127ce68c11a$export$2e2bcd8739ae039,\n Composite: $6191763894f0be63$export$2e2bcd8739ae039,\n HtmlDivFormatter: $79e99f27b77a3c71$export$2e2bcd8739ae039,\n HtmlTableFormatter: $caa8cd86020c188e$export$2e2bcd8739ae039,\n INDETERMINATE: $72b24102c7d826fd$export$c5a6fe907430212e,\n Line: $a449f9ee1c7acbe4$export$2e2bcd8739ae039,\n Literal: $34ab5875df061287$export$2e2bcd8739ae039,\n Metadata: $709af735c74ed550$export$2e2bcd8739ae039,\n NONE: $72b24102c7d826fd$export$c53d0f541b41b88e,\n Paragraph: $ca405333ab46d462$export$2e2bcd8739ae039,\n SoftLineBreak: $4c3a42e9543eea65$export$2e2bcd8739ae039,\n Song: $962eb86a322c5cfb$export$2e2bcd8739ae039,\n TAB: $72b24102c7d826fd$export$f1c9dd0f5207dd5e,\n Tag: $b58c551853385714$export$2e2bcd8739ae039,\n Ternary: $4afcde69e7cb3e85$export$2e2bcd8739ae039,\n TextFormatter: $e2dfad8e72d5aab0$export$2e2bcd8739ae039,\n UltimateGuitarParser: $ecd3f348894bfbde$export$2e2bcd8739ae039,\n VERSE: $72b24102c7d826fd$export$4b194284baed1659,\n templateHelpers: {\n isEvaluatable: $f52913d8767c6236$export$e3f63561d52b936d,\n isChordLyricsPair: $dfcb12f4c26c139d$export$17c9e635b932873b,\n lineHasContents: $dfcb12f4c26c139d$export$3db5961874282581,\n isTag: $dfcb12f4c26c139d$export$3bf645f08efe3292,\n isComment: $dfcb12f4c26c139d$export$3ab01370f5e64ac8,\n stripHTML: $dfcb12f4c26c139d$export$6ea1b0eb82ead3f,\n each: $dfcb12f4c26c139d$export$79b2f7037acddd43,\n when: $dfcb12f4c26c139d$export$a55877ca9db47377,\n hasTextContents: $dfcb12f4c26c139d$export$b8d631d9200974fa,\n lineClasses: $dfcb12f4c26c139d$export$8a559c16cc3576,\n paragraphClasses: $dfcb12f4c26c139d$export$dcd1550c9709312c,\n evaluate: $dfcb12f4c26c139d$export$fef61f332f2c0afc,\n fontStyleTag: $dfcb12f4c26c139d$export$ca030c9435779e4b,\n renderChord: $f5b90e5dc4871932$export$596ec52955da9472,\n hasChordContents: $f52913d8767c6236$export$d332d76d125f0cbe\n }\n};\n\n\nexport {$c0b60add41284d2e$export$2e2bcd8739ae039 as default, $f0449e2486cb2372$export$2e2bcd8739ae039 as Chord, $9fb93292861ee876$export$2e2bcd8739ae039 as ChordDefinition, $0d04ced54ebef610$export$2e2bcd8739ae039 as ChordLyricsPair, $fe0c6f4316da78b0$export$2e2bcd8739ae039 as ChordProFormatter, $6ba1c85836253a53$export$2e2bcd8739ae039 as ChordProParser, $f46090a0372cd33a$export$2e2bcd8739ae039 as ChordSheetParser, $6f86ed99ed3b8cb9$export$2e2bcd8739ae039 as ChordSheetSerializer, $07208092bd922ab3$export$2e2bcd8739ae039 as ChordsOverWordsFormatter, $b58bece5a707e8d1$export$2e2bcd8739ae039 as ChordsOverWordsParser, $acbb1127ce68c11a$export$2e2bcd8739ae039 as Comment, $6191763894f0be63$export$2e2bcd8739ae039 as Composite, $750c574c15888689$export$2e2bcd8739ae039 as Formatter, $79e99f27b77a3c71$export$2e2bcd8739ae039 as HtmlDivFormatter, $24ff40cf6e6a7e2f$export$2e2bcd8739ae039 as HtmlFormatter, $caa8cd86020c188e$export$2e2bcd8739ae039 as HtmlTableFormatter, $4d72f408c2526a1c$export$2e2bcd8739ae039 as Key, $a449f9ee1c7acbe4$export$2e2bcd8739ae039 as Line, $34ab5875df061287$export$2e2bcd8739ae039 as Literal, $709af735c74ed550$export$2e2bcd8739ae039 as Metadata, $ca405333ab46d462$export$2e2bcd8739ae039 as Paragraph, $4c3a42e9543eea65$export$2e2bcd8739ae039 as SoftLineBreak, $962eb86a322c5cfb$export$2e2bcd8739ae039 as Song, $b58c551853385714$export$2e2bcd8739ae039 as Tag, $4afcde69e7cb3e85$export$2e2bcd8739ae039 as Ternary, $e2dfad8e72d5aab0$export$2e2bcd8739ae039 as TextFormatter, $ecd3f348894bfbde$export$2e2bcd8739ae039 as UltimateGuitarParser, $dfcb12f4c26c139d$export$2e2bcd8739ae039 as templateHelpers, $72b24102c7d826fd$export$92249c36c213e508 as ABC, $72b24102c7d826fd$export$8db6c706fc9142b2 as CHORUS, $72b24102c7d826fd$export$c5a6fe907430212e as INDETERMINATE, $72b24102c7d826fd$export$6a5a2eab72b6e3d as LILYPOND, $72b24102c7d826fd$export$c53d0f541b41b88e as NONE, $72b24102c7d826fd$export$4d318981b5a83836 as NUMERIC, $72b24102c7d826fd$export$539a6499f4711c57 as SOLFEGE, $72b24102c7d826fd$export$27c95a7104c1f7aa as SYMBOL, $72b24102c7d826fd$export$f1c9dd0f5207dd5e as TAB, $72b24102c7d826fd$export$4b194284baed1659 as VERSE, $72b24102c7d826fd$export$1321df9b16c30c6a as NUMERAL};\n//# sourceMappingURL=module.js.map\n","import ChordSheetJS from \"chordsheetjs\";\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n const node = document.getElementById(\"song-chords\");\n\n if (node) {\n const data = JSON.parse(node.getAttribute(\"data\"));\n const chordSheet = data;\n const parser = new ChordSheetJS.ChordProParser();\n const song = parser.parse(chordSheet);\n const formatter = new ChordSheetJS.TextFormatter();\n const disp = formatter.format(song);\n\n node.replaceWith(disp);\n }\n});\n"],"names":["methods","names","registerMethods","name","m","_name","addMethodNames","getMethodsFor","getMethodNames","_names","map","array","block","i","il","result","filter","radians","d","unCamelCase","g","capitalize","proportionalSize","element","width","height","box","getOrigin","o","origin","ox","oy","condX","condY","x","y","descriptiveElements","isDescriptive","writeDataToDom","data","defaults","cloned","key","svg","html","xmlns","xlink","globals","getWindow","Base","elements","root","create","ns","makeInstance","isHTML","adopter","wrapper","nodeOrNew","node","adopt","className","register","asRoot","getClass","did","eid","assignNewId","extend","modules","wrapWithAttrCheck","fn","args","siblings","position","next","prev","forward","backward","front","back","before","after","insertBefore","insertAfter","numberAndUnit","hex","rgb","reference","transforms","whitespace","isHex","isRgb","isBlank","isNumber","isImage","delimiter","isPathLetter","classes","attr","hasClass","addClass","removeClass","c","toggleClass","css","style","val","ret","el","t","cased","show","hide","visible","a","v","r","remember","k","forget","memory","sixDigitHex","componentHex","component","integer","is","object","space","getParameters","b","params","cieSpace","hueToRgb","p","q","Color","inputs","color","mode","random","round","sin","pi","l","h","grey","_a","_b","_c","max","min","isGrey","delta","s","values","noWhitespace","hexParse","_d","components","z","dToR","yL","xL","zL","ct","mx","nm","rU","gU","bU","pow","bd","rV","gV","bV","r255","g255","b255","rL","gL","bL","xU","yU","zU","format","Point","base","source","Matrix","point","closeEnough","threshold","flipBoth","flipX","flipY","skewX","skewY","scaleX","scaleY","shear","theta","px","py","translate","tx","ty","relative","rx","ry","e","f","cx","cy","matrix","dx","dy","determinant","ccw","sx","thetaRad","st","lam","sy","other","comp","axis","around","Element","det","na","nb","nc","nd","ne","nf","cos","lx","ly","current","transformer","ctm","screenCTM","rect","parser","path","isNulledBox","domContains","Box","xMin","xMax","yMin","yMax","getBox","getBBoxFn","retry","bbox","clone","rbox","inside","level","zoomX","zoomY","zoom","zoomAmount","List","arr","fnOrMethodName","reserved","obj","attrs","baseFind","query","parent","find","findOne","listenerId","windowEvents","getEvents","instance","n","getEventTarget","clearEvents","on","events","listener","binding","options","bag","event","ev","off","namespace","dispatch","EventTarget","j","noop","timeline","SVGArray","SVGNumber","unit","number","value","colorAttributes","hooks","registerAttrHook","last","curr","_val","hook","Dom","deep","assignNewIds","nodeClone","children","nodeName","htmlOrFn","outerHTML","id","selector","matcher","type","precision","factor","svgOrFn","outerSVG","text","xmlOrFn","outerXML","_this","well","fragment","len","until","isSelector","parents","sugar","extension","mat","angle","direction","length","untransform","matrixify","str","kv","transform","toParent","pCtm","toRoot","decomposed","cleanRelative","Container","index","Defs","Shape","Ellipse","circled","Fragment","from","to","Gradient","gradiented","Pattern","Image","url","callback","img","pattern","PointArray","maxX","maxY","minX","minY","points","MorphArray","Line","x1","y1","x2","y2","pointed","Marker","orient","marker","makeSetterGetter","easing","pos","steps","stepPosition","jumps","beforeFlag","step","jumping","Stepper","Ease","Controller","target","dt","recalculate","duration","overshoot","eps","os","zeta","wn","Spring","velocity","acceleration","newPosition","PID","windup","segmentParameters","pathHandlers","p0","mlhvqtcsaz","jl","makeAbsolut","command","segmentComplete","startNewSegment","token","finalizeNumber","pathLetter","lastCommand","small","isSmall","inNumber","finalizeSegment","isArcFlag","isArc","isExponential","pathDelimiters","pathParser","toAbsolute","arrayToString","PathArray","getClassForType","NonMorphable","morphableTypes","ObjectBag","Morphable","stepper","TransformBag","sortByKey","defaultObject","toDelete","objOrArr","entries","Type","num","registerMorphableType","makeMorphable","context","mapper","Path","clear","move","plot","size","Polygon","poly","Polyline","Rect","Queue","item","remove","Animator","delay","time","now","nextTimeout","lastTimeout","nextFrame","lastFrame","nextImmediate","makeSchedule","runnerInfo","start","end","defaultSource","w","Timeline","timeSource","lastRunnerInfo","lastDuration","endTimes","dtOrForever","yes","currentSpeed","positive","runner","when","absoluteStartTime","endTime","persist","info","speed","immediateStep","dtSource","dtTime","runnersLeft","dtToStart","Runner","times","swing","wait","enabled","loopDuration","loopsDone","whole","partial","swinging","backwards","uncliped","swingForward","initFn","runFn","retargetFn","isTransform","reverse","running","justStarted","justFinished","declarative","converged","needsIt","method","morpher","positionOrDt","allfinished","extra","FakeRunner","done","lmultiply","getRunnerTransform","mergeTransforms","netTransform","RunnerArray","deleteCnt","newRunner","lastRunner","by","currentRunner","difference","nameOrAttrs","keys","newToAttrs","newKeys","differences","addedFromAttrs","oldFromAttrs","oldToAttrs","newLevel","newPoint","affine","isMatrix","currentAngle","startTransform","setup","run","rTarget","rCurrent","possibilities","distances","shortest","affineParameters","retarget","newTransforms","newTo","Svg","Symbol","plain","center","ax","ay","amove","build","Text","rebuild","self","blankLineOffset","leading","fontSize","firstLine","textable","Tspan","tspan","Circle","ClipPath","clipper","ForeignObject","dmove","child","G","containerGeometry","A","link","Mask","masker","Stop","offset","opacity","cssRule","rule","Style","src","TextPath","track","pathArray","importNodes","textPath","Use","file","SVG","ChordBox","sel","param","numFrets","msg","textAttrs","newX","newY","chord","barres","positionText","tuning","spacing","fretSpacing","fromX","fromY","string","fret","label","stringNum","shiftPosition","mute","fretNum","textYShift","stringFrom","stringTo","theFretNum","stringFromNum","stringToNum","xTo","yTo","draw","opts","chord_form","vexchords.draw","$33f7017b34767c5f$var$peg$padEnd","targetLength","padString","$33f7017b34767c5f$export$628c65c376ead699","expected","found","ch","literalEscape","classEscape","describeExpectation","expectation","escapedParts","part","describeExpected","expected1","descriptions","describeFound","found1","message","location","sources","loc","filler","line","$33f7017b34767c5f$var$peg$parse","input","peg$FAILED","peg$source","peg$startRuleFunctions","peg$parseChord","peg$startRuleFunction","peg$c0","peg$c1","peg$c2","peg$classExpectation","peg$c3","modifier","suffix","bass","peg$c4","peg$c5","peg$c6","peg$c7","peg$c8","peg$literalExpectation","peg$c9","peg$c10","peg$c11","peg$c12","peg$c13","peg$c14","peg$c15","peg$c16","peg$c17","peg$c18","peg$c19","peg$c20","peg$c21","peg$c22","peg$c23","peg$c24","peg$c25","peg$c26","peg$c27","peg$c28","peg$c29","peg$c30","peg$c31","peg$c32","peg$c33","peg$c34","peg$c35","peg$c36","peg$c37","peg$c38","peg$c39","peg$c40","peg$c41","peg$c42","peg$c43","peg$c44","peg$c45","peg$c46","peg$currPos","peg$savedPos","peg$posDetailsCache","peg$maxFailPos","peg$maxFailExpected","peg$result","peg$computeLocation","text1","ignoreCase","parts","inverted","peg$endExpectation","peg$computePosDetails","details","startPos","endPos","startPosDetails","endPosDetails","peg$fail","peg$buildStructuredError","location1","s0","s1","peg$parseNumeral","peg$parseNumeric","peg$parseChordSolfege","peg$parseChordSymbol","peg$parseChordModifier","s2","s3","s4","peg$parseChordSymbolRoot","peg$parseChordSuffix","peg$parseChordSymbolBass","peg$parseChordSolfegeRoot","peg$parseChordSolfegeBass","peg$parseNumeralRoot","peg$parseNumeralBass","peg$parseNumericRoot","peg$parseNumericBass","$33f7017b34767c5f$export$98e6a39c04603d36","$72b24102c7d826fd$export$78d8c50e853acd10","$72b24102c7d826fd$export$8db6c706fc9142b2","$72b24102c7d826fd$export$e2b0b9a5e613f348","$72b24102c7d826fd$export$c5a6fe907430212e","$72b24102c7d826fd$export$c53d0f541b41b88e","$72b24102c7d826fd$export$f1c9dd0f5207dd5e","$72b24102c7d826fd$export$4b194284baed1659","$72b24102c7d826fd$export$6a5a2eab72b6e3d","$72b24102c7d826fd$export$92249c36c213e508","$72b24102c7d826fd$export$27c95a7104c1f7aa","$72b24102c7d826fd$export$4d318981b5a83836","$72b24102c7d826fd$export$1321df9b16c30c6a","$72b24102c7d826fd$export$539a6499f4711c57","$72b24102c7d826fd$export$6145372d252f6576","$72b24102c7d826fd$export$1ea14522906630af","$72b24102c7d826fd$export$f5b1d6b4244c9536","$72b24102c7d826fd$export$f0f7b592ea674eb2","$72b24102c7d826fd$export$f23edc19d247fd25","$72b24102c7d826fd$export$39615881bb0d21f6","$0cb401ed3f1d0550$export$7e1516eaf3ebe01f","$0cb401ed3f1d0550$export$40141681ebb03523","$23642067c1e64fd7$var$enharmonics","$23642067c1e64fd7$export$2e2bcd8739ae039","$0d04ced54ebef610$var$ChordLyricsPair","chords","lyrics","annotation","normalizeChordSuffix","transposedChord","func","chordObj","$f0449e2486cb2372$export$2e2bcd8739ae039","changedChord","$0d04ced54ebef610$export$2e2bcd8739ae039","$d643910899695a08$var$mapping","$d643910899695a08$export$2e2bcd8739ae039","$f52913d8767c6236$export$bf7e789722aab9d6","$f52913d8767c6236$export$e3f63561d52b936d","$f52913d8767c6236$export$bc3bea8325045070","paddedString","$f52913d8767c6236$export$c106dd0671a0fc2d","proc","$f52913d8767c6236$export$78d1711480f95c3e","$f52913d8767c6236$export$51fabfbeed747719","keyType","$f52913d8767c6236$export$ba13e0e2f19e61a1","$f52913d8767c6236$var$GradeSet","grades","preferredModifier","grade","$f52913d8767c6236$var$determineKey","minor","$f52913d8767c6236$export$65f5b958d546bb3f","$f52913d8767c6236$export$1adf39ab1ab70d69","$4d72f408c2526a1c$var$regexes","$4d72f408c2526a1c$var$KEY_TYPES","$4d72f408c2526a1c$var$NATURAL_MINORS","$4d72f408c2526a1c$var$NO_FLAT_GRADES","$4d72f408c2526a1c$var$NO_FLAT_NUMBERS","$4d72f408c2526a1c$var$NO_SHARP_GRADES","$4d72f408c2526a1c$var$NO_SHARP_NUMBERS","$4d72f408c2526a1c$var$Key","keyString","trimmed","count","resolvedKey","match","note","isMinor","uppercaseKey","numeral","normalizedKey","modifierString","upperCaseKey","parsed","keyStringOrObject","wrapped","oneKey","otherKey","referenceKeyGrade","originalKeyString","otherKeyObj","keyObj","normalized","referenceKey","showMinor","useUnicodeModifier","originalModifier","transposedKey","newGrade","newModifier","rootKeyString","enharmonics","thisKeyString","attributes","overwrite","$4d72f408c2526a1c$export$2e2bcd8739ae039","$4fe61140afd91ab4$export$2e2bcd8739ae039","$f0449e2486cb2372$var$Chord","chordString","trimmedChord","ast","error","errorObj","chordSymbolChord","chordSolfegeChord","normalizeSuffix","normalizedRoot","bassBase","bassModifier","chordType","otherChord","properties","transformFunc","$d7af2fe287893822$var$peg$padEnd","$d7af2fe287893822$export$628c65c376ead699","$d7af2fe287893822$var$peg$parse","peg$parseChordDefinitionValue","baseFret","frets","fingers","finger","peg$otherExpectation","peg$silentFails","description","s5","s6","peg$parseChordDefinitionName","peg$parse_","peg$parseBaseFret","peg$parseFretWithLeadingSpace","peg$parseChordFingersDefinition","peg$parseChordDefinitionNameBase","peg$parseChordDefinitionNameBass","peg$parseChordDefinitionNote","peg$parseChordDefinitionSuffix","peg$parse__","peg$parseFretNumber","peg$parseFingerWithLeadingSpace","peg$parseFinger","peg$parseFingerNumber","peg$parseFret","peg$parseOpenFret","peg$parseNonSoundingString","peg$parseWhitespaceCharacter","$d7af2fe287893822$export$98e6a39c04603d36","$9fb93292861ee876$var$ChordDefinition","chordDefinition","$9fb93292861ee876$export$2e2bcd8739ae039","$d195682178d1ec30$export$a014e67b549cbef4","$d195682178d1ec30$var$MetadataConfiguration","metadataConfiguration","$d195682178d1ec30$export$2e2bcd8739ae039","$c8d24aa77565e86d$var$InstrumentConfiguration","instrumentConfiguration","$c8d24aa77565e86d$export$2e2bcd8739ae039","$0817420247ff1958$var$UserConfiguration","userConfiguration","$0817420247ff1958$export$2e2bcd8739ae039","$5f5759837fa40df2$export$f152539e8297cacc","$5f5759837fa40df2$export$78c0028a34264234","$5f5759837fa40df2$var$Configuration","configuration","mergedConfig","$5f5759837fa40df2$export$2e2bcd8739ae039","$750c574c15888689$var$Formatter","$750c574c15888689$export$2e2bcd8739ae039","$9be84d5515dccc21$var$AstComponent","traceInfo","$9be84d5515dccc21$export$2e2bcd8739ae039","$b58c551853385714$export$10227cb086d1770c","$b58c551853385714$export$585ac316350d4927","$b58c551853385714$export$17d8dfb3db842bf","$b58c551853385714$export$866f445d49bad88e","$b58c551853385714$export$a29989082612d0d9","$b58c551853385714$export$98424633dc8c377f","$b58c551853385714$export$4ab8c75045d12480","$b58c551853385714$export$bacc88974c736870","$b58c551853385714$export$37c7b13f53af2469","$b58c551853385714$export$1c874e9780385ecd","$b58c551853385714$export$473c1a4819e5180b","$b58c551853385714$export$4b28ac1ae75aff60","$b58c551853385714$export$e3f6cdbd95b1f8f","$b58c551853385714$export$66a0ef3ffeab32b7","$b58c551853385714$export$640d294ab83f9040","$b58c551853385714$export$7167c830cefcb6b5","$b58c551853385714$export$430b1920f5feeae","$b58c551853385714$export$a6901bd008617c61","$b58c551853385714$export$a1aa5ca2f265ee7f","$b58c551853385714$export$9e9edc166b8d0233","$b58c551853385714$export$3550cc87694d54e0","$b58c551853385714$export$4f5168acae064e01","$b58c551853385714$export$b7e6dcd848b88f43","$b58c551853385714$export$634ff7795b596e62","$b58c551853385714$export$8dd1111100e0e88d","$b58c551853385714$export$deca399f8cd9b7dc","$b58c551853385714$export$5895c693c74b9cf4","$b58c551853385714$export$bd8d57d0bc5a8478","$b58c551853385714$export$a9905336c0111a3a","$b58c551853385714$export$f1e53f710478ceb4","$b58c551853385714$export$ae60ab9b4739fc3d","$b58c551853385714$export$b7627374a6424f68","$b58c551853385714$export$90b88dc425a06a95","$b58c551853385714$export$2b0cbe6e95114098","$b58c551853385714$export$1f62a95bf5703cac","$b58c551853385714$export$f7227d9f34d97bec","$b58c551853385714$export$14fe4ba6e94df04d","$b58c551853385714$export$f0dee7f48597f09a","$b58c551853385714$export$d2ed2b49c006eb23","$b58c551853385714$export$8db6c706fc9142b2","$b58c551853385714$export$d8cbdf44b1f66df1","$b58c551853385714$var$CHORDFONT_SHORT","$b58c551853385714$var$CHORDSIZE_SHORT","$b58c551853385714$var$COMMENT_SHORT","$b58c551853385714$var$END_OF_BRIDGE_SHORT","$b58c551853385714$var$END_OF_CHORUS_SHORT","$b58c551853385714$var$END_OF_GRID_SHORT","$b58c551853385714$var$END_OF_TAB_SHORT","$b58c551853385714$var$END_OF_VERSE_SHORT","$b58c551853385714$var$NEW_KEY_SHORT","$b58c551853385714$var$START_OF_BRIDGE_SHORT","$b58c551853385714$var$START_OF_CHORUS_SHORT","$b58c551853385714$var$START_OF_GRID_SHORT","$b58c551853385714$var$START_OF_TAB_SHORT","$b58c551853385714$var$START_OF_VERSE_SHORT","$b58c551853385714$var$SUBTITLE_SHORT","$b58c551853385714$var$TEXTFONT_SHORT","$b58c551853385714$var$TEXTSIZE_SHORT","$b58c551853385714$var$TITLE_SHORT","$b58c551853385714$var$RENDERABLE_TAGS","$b58c551853385714$export$57ecf0dc09effb3","$b58c551853385714$export$75d737e15c3fab80","$b58c551853385714$var$INLINE_FONT_TAGS","$b58c551853385714$var$DIRECTIVES_WITH_RENDERABLE_LABEL","$b58c551853385714$var$ALIASES","$b58c551853385714$var$TAG_REGEX","$b58c551853385714$var$CUSTOM_META_TAG_NAME_REGEX","$b58c551853385714$var$START_TAG_TO_SECTION_TYPE","$b58c551853385714$var$END_TAG_TO_SECTION_TYPE","$b58c551853385714$export$dfea9b8ecbbb8623","$b58c551853385714$export$3d329a2c209fbc28","$b58c551853385714$var$SECTION_START_REGEX","$b58c551853385714$var$SECTION_END_REGEX","$b58c551853385714$export$3ef04055cb4a269a","tagName","$b58c551853385714$var$translateTagNameAlias","sanitizedName","$b58c551853385714$var$Tag","isNegated","metaName","metaValue","tag","regex","matches","parseStartResult","parseEndResult","labelAttribute","tagType","$b58c551853385714$export$2e2bcd8739ae039","$99541d8b5a9b61aa$var$EvaluationError","column","$99541d8b5a9b61aa$export$2e2bcd8739ae039","$82faf91a3bf88652$var$Evaluatable","$82faf91a3bf88652$export$2e2bcd8739ae039","$6191763894f0be63$var$Composite","expressions","variable","metadata","metadataSeparator","expression","$6191763894f0be63$export$2e2bcd8739ae039","$4afcde69e7cb3e85$var$Ternary","valueTest","trueExpression","falseExpression","upperContext","$4afcde69e7cb3e85$export$2e2bcd8739ae039","$34ab5875df061287$var$Literal","$34ab5875df061287$export$2e2bcd8739ae039","$acbb1127ce68c11a$var$Comment","content","$acbb1127ce68c11a$export$2e2bcd8739ae039","$4c3a42e9543eea65$var$SoftLineBreak","$4c3a42e9543eea65$export$2e2bcd8739ae039","$1582051153255182$var$splitSectionContent","$1582051153255182$export$45986ccf08e93b0b","items","$1582051153255182$export$665e0f4515a68234","startTag","endTag","$1582051153255182$export$4478cda40be33ba2","$1582051153255182$export$4bae24da7c5e47c7","search","replaceMatch","replaceRest","subString","regExp","occurrences","rest","$1582051153255182$export$bb6f5ab929ea49e7","lyric","$1582051153255182$export$54f22f5279737844","pairs","_first","first","addedLeadingChord","$1582051153255182$var$isChordLyricsPair","$1582051153255182$var$combinableChordLyricsPairs","itemA","itemB","$1582051153255182$export$ce8f3be11402ed10","chopFirstWord","combinedItems","nextItem","$d19fa9f128cdbd26$var$peg$padEnd","$d19fa9f128cdbd26$export$628c65c376ead699","$d19fa9f128cdbd26$var$peg$parse","peg$parseChordSheet","lines","trailingLine","tokens","comment","mergedLyrics","sequence","variableName","testValue","peg$c47","peg$c48","peg$c49","peg$c50","peg$c51","peg$c52","peg$c53","peg$c54","peg$c55","peg$c56","peg$c57","peg$c58","peg$c59","peg$c60","peg$c61","peg$c62","peg$c63","peg$c64","peg$c65","peg$c66","tagColonWithValue","peg$c67","peg$c68","peg$c69","negator","peg$c70","peg$c71","peg$c72","peg$c73","tagValue","peg$c74","peg$c75","peg$c76","pair","peg$c77","attribute","peg$c78","peg$c79","peg$c80","peg$c81","chars","peg$c82","peg$c83","peg$c84","peg$c85","peg$c86","peg$c87","peg$c88","peg$c89","peg$c90","peg$c91","peg$c92","peg$c93","peg$c94","peg$c95","peg$c96","peg$c97","peg$c98","peg$c99","peg$c100","peg$c101","peg$c102","peg$c103","peg$c104","peg$c105","peg$c106","peg$c107","peg$c108","peg$c109","peg$c110","peg$c111","peg$c112","peg$c113","peg$c114","peg$c115","peg$c116","peg$c117","peg$c118","peg$c119","peg$c120","peg$c125","peg$c126","peg$c127","peg$c128","peg$c129","peg$c130","peg$c131","peg$c132","peg$c133","peg$c134","peg$c135","peg$c136","peg$c137","peg$c138","peg$c139","peg$c140","peg$c141","peg$c142","peg$c143","peg$c144","peg$c145","peg$c146","peg$c147","peg$c148","peg$c149","peg$c150","peg$c151","peg$c152","peg$c153","peg$c154","peg$c155","peg$c156","peg$c157","peg$c158","peg$c159","peg$c160","peg$c161","peg$anyExpectation","peg$c162","peg$c163","peg$c164","peg$c165","peg$c166","peg$c167","peg$c168","peg$c169","peg$c170","peg$c171","peg$c172","peg$c173","peg$c174","peg$parseComponentWithNewline","peg$parseComponent","peg$parseNewLine","peg$parseSection","peg$parseLine","peg$parseLyrics","peg$parseToken","peg$parseComment","peg$parseSpace","peg$parseChordDefinition","peg$parseTag","peg$parseAnnotationLyricsPair","peg$parseChordLyricsPair","peg$parseMetaTernary","peg$parseAnnotation","peg$parseLyricsChar","peg$parseLyricsCharOrSpace","peg$parseEscape","peg$parseChordChar","s7","s8","peg$parseMetaVariableName","peg$parseMetaValueTest","peg$parseMetaTernaryTrueFalseExpressions","peg$parseMetaTestValue","peg$parseChar","peg$parseMetaExpression","peg$parseMetaTernaryFalseExpression","peg$parseWordChar","s9","s10","peg$parseTagSelector","peg$parseTagName","peg$parseTagColonWithValue","peg$parseTagSelectorValue","peg$parseTagSelectorNegator","peg$parseTagValue","peg$parseTagAttributes","peg$parseTagSimpleValue","peg$parseTagAttributeWithLeadingSpace","peg$parseTagAttribute","peg$parseTagAttributeName","peg$parseTagAttributeValue","peg$parseTagValueChar","peg$parseTagAttributeValueChar","peg$parseAbcSection","peg$parseGridSection","peg$parseLySection","peg$parseTabSection","peg$parseAbcStartTag","peg$parseAbcEndTag","peg$parseSectionCharacter","peg$parseGridStartTag","peg$parseGridEndTag","peg$parseLyStartTag","peg$parseLyEndTag","peg$parseTabStartTag","peg$parseTabEndTag","peg$parseCarriageReturnLineFeed","peg$parseCarriageReturn","peg$parseLineFeed","$d19fa9f128cdbd26$export$98e6a39c04603d36","$7011f990fc73fda8$var$Font","font","colour","$7011f990fc73fda8$export$2e2bcd8739ae039","$a449f9ee1c7acbe4$var$Line","clonedLine","clonedItem","chr","nameOrTag","$a449f9ee1c7acbe4$export$2e2bcd8739ae039","$ca405333ab46d462$var$getCommonValue","fallback","uniqueValues","$ca405333ab46d462$var$Paragraph","types","selectors","$ca405333ab46d462$export$2e2bcd8739ae039","$56f32ce29e8cb670$var$MetadataAccessors","$56f32ce29e8cb670$export$2e2bcd8739ae039","$709af735c74ed550$var$appendValue","$709af735c74ed550$var$Metadata","currentValue","prop","parsedKey","arrayValue","itemIndex","capoString","capo","$709af735c74ed550$export$2e2bcd8739ae039","$e96fef8ff540cb26$var$FontSize","kind","percentage","parsedFontSize","$e96fef8ff540cb26$export$2e2bcd8739ae039","$6b2474c81fc08fe5$var$FontStack","$6b2474c81fc08fe5$export$2e2bcd8739ae039","$a204f7467d92fb73$var$ParserWarning","lineNumber","$a204f7467d92fb73$export$2e2bcd8739ae039","$4132ae2381aed81f$var$SongBuilder","song","sectionType","tagContents","warning","$4132ae2381aed81f$export$2e2bcd8739ae039","$f5b90e5dc4871932$export$fd31a53e6281557e","transposeKey","songKey","$f5b90e5dc4871932$var$chordTransposeDistance","renderKey","transpose","$f5b90e5dc4871932$var$changeChordType","$f5b90e5dc4871932$var$effectiveModifier","contextKey","$f5b90e5dc4871932$var$shapeChord","effectiveTransposeDistance","normalizeChords","effectiveKey","chordStyle","correctedChord","normalizedChord","$f5b90e5dc4871932$export$596ec52955da9472","decapo","$f5b90e5dc4871932$export$efb38dd75b8e2957","metadataValue","metadataValueTruthy","$962eb86a322c5cfb$var$Song","copy","expandedLines","filteredLine","currentParagraph","paragraphs","nextLine","strKey","strCapo","newKey","currentKey","targetKey","transposedSong","wrappedKey","updatedSong","insertIndex","newLine","clonedSong","builder","changedItem","itemChords","parsedChord","chordDefinitions","changedLine","findCallback","updateCallback","notFoundCallback","$962eb86a322c5cfb$export$2e2bcd8739ae039","$6f86ed99ed3b8cb9$var$CHORD_LYRICS_PAIR","$6f86ed99ed3b8cb9$var$CHORD_SHEET","$6f86ed99ed3b8cb9$var$COMMENT","$6f86ed99ed3b8cb9$var$LINE","$6f86ed99ed3b8cb9$var$SOFT_LINE_BREAK","$6f86ed99ed3b8cb9$var$TAG","$6f86ed99ed3b8cb9$var$TERNARY","$6f86ed99ed3b8cb9$var$ChordSheetSerializer","serializedTag","chordLyricsPair","ternary","literal","serializedSong","astComponent","parsedItem","$6f86ed99ed3b8cb9$export$2e2bcd8739ae039","$a68b1ca180ade890$var$NullTracer","$a68b1ca180ade890$export$2e2bcd8739ae039","$6ba1c85836253a53$var$ChordProParser","chordSheet","$6ba1c85836253a53$export$2e2bcd8739ae039","$dfcb12f4c26c139d$export$4c0287abd2ec956e","paragraph","$dfcb12f4c26c139d$export$b8d631d9200974fa","$e2dfad8e72d5aab0$var$TextFormatter","title","subtitle","separator","bodyParagraphs","expandedBodyParagraphs","expandChorusDirective","contentLength","lyricsLength","_metadata","formatter","$e2dfad8e72d5aab0$export$2e2bcd8739ae039","$c0b60add41284d2e$export$2e2bcd8739ae039","ChordSheetJS","disp"],"mappings":"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ACN,GAAM,IACT,EACD,EAAK,CACD,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,IACT,EACD,KAAM,CACF,GAAM,KACN,GAAM,IACT,EACD,GAAM,CACF,KAAM,KACN,KAAM,KACN,KAAM,KACN,EAAK,KACL,EAAK,IACR,EACD,EAAK,CACD,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,IACT,EACD,KAAM,CACF,KAAM,KACN,KAAM,KACN,GAAM,IACT,EACD,GAAM,CACF,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,IACT,EACD,IAAO,CACH,GAAM,IACN,GAAM,IACT,EACD,GAAM,CACF,KAAM,KACN,KAAM,IACT,EACD,MAAO,CACH,KAAM,KACN,KAAM,KACN,GAAM,IACT,EACD,GAAM,CACF,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,IACT,EACD,GAAM,CACF,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,IACT,EACD,GAAM,CACF,KAAM,KACN,KAAM,KACN,KAAM,IACT,EACD,MAAO,CACH,KAAM,KACN,KAAM,KACN,GAAM,KACN,GAAM,KACN,GAAM,IACT,EACD,GAAM,CACF,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,IACT,EACD,GAAM,CACF,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,IACT,EACD,MAAO,CACH,GAAM,KACN,GAAM,IACT,EACD,EAAK,CACD,GAAM,IACT,EACD,IAAO,CACH,GAAM,KACT,EACD,IAAO,CACH,GAAM,MACN,MAAO,MACP,GAAM,KACT,EACD,GAAM,CACF,MAAO,MACP,MAAO,MACP,MAAO,OACP,OAAQ,MACR,MAAO,KACV,EACD,MAAO,CACH,IAAO,MACP,IAAO,KACV,EACD,IAAO,CACH,GAAM,MACN,MAAO,MACV,EACD,GAAM,CACF,MAAO,MACP,MAAO,MACP,KAAQ,KACX,EACD,IAAO,CACH,MAAO,MACP,MAAO,OACP,OAAQ,MACR,MAAO,KACV,EACD,GAAM,CACF,I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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,76]}